Estou tentando executar um script python do C ++ chamando popen().
O código importante é assim:
ostringstream command;
command<<"cd ; python3 piap.py "<<u<<" "<<rho;
if(!(in = popen(command.str().c_str(), "r"))){
cout<<"some problem with the subprocess"<<endl;
}
Eu também tentei chamar python3.5
em popen
, mas isso não muda nada.
Você pode encontrar o arquivo cpp inteiro aqui: link
Mas o resto é apenas clichê específico do problema.
O código compila muito bem, mas durante o tempo de execução, produz esta mensagem de erro:
Erro fatal no Python: Py_Initialize: não é possível obter a codificação de localidade
Arquivo
"/home/hk/programs/clion-2016.1.2/bin/gdb/lib/python2.7/encodings/init.py",
linha 123
elevar CodecRegistryError, \
^ SyntaxError: sintaxe inválida
Thread atual 0x00007ffff7fd1700 (a mais recente chama primeiro): Abortada
(núcleo despejado)
Existem duplicatas desta questão:
Erro fatal do Python: Py_Initialize : Não é possível obter a codificação de localidade ... SyntaxError: sintaxe inválida Abortada (core dumping)
Bash tenta executar python no comando desconhecido e falhar em Py_Initialize
Infelizmente, as soluções não funcionam para mim:
- Ainda não defini pythonpath
- Meu script python especifica a versão exata com
#!/usr/bin/python3.5
- Meu
/usr/lib/command-not-found
chama explicitamente /usr/bin/python3
E ainda há mais para esse bug.
- Parece estar relacionado ao meu IDE, o Clion. Você pode ver isso na mensagem de erro. De alguma forma, o interpretador python tenta carregar um script de inicialização a partir da distribuição do clion
- Aparece apenas durante a depuração. Quando executado no modo de liberação, a chamada popen () funciona muito bem.
Eu verifiquei qual versão do python estava configurada como padrão no Clion, é 3.5 e o interpretador correto também.
Eu estou perdido, porque o intérprete errado foi escolhido?