Erro fatal no Python: Py_Initialize: não é possível obter a codificação de localidade

2

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.

  1. 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
  2. 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?

    
por lhk 21.08.2016 / 21:32

1 resposta

1

Eu tenho um problema semelhante em um contexto diferente (ao chamar um script python3 do ambiente interativo do Programa de plotagem do VisIt ). A razão pela qual isso acontece é que, aparentemente, as variáveis de ambiente (em particular, PATH ) são definidas para valores locais que desabilitam a instalação do Python3 em todo o sistema.

Você pode contornar isso executando o Python 3 em um clean-slate env . Deve ser algo como isto:

ostringstream command;
command<<"cd ; env -i bash -l -c 'python3 piap.py "<<u<<" "<<rho<<"'";
if(!(in = popen(command.str().c_str(), "r"))){
    cout<<"some problem with the subprocess"<<endl;
}
    
por leftaroundabout 14.09.2016 / 17:52