Фатальная ошибка Python: Py_Initialize: Невозможно получить кодирование локали

Я пытаюсь выполнить сценарий Python от C++ путем вызова popen().

Важный код похож на это:

ostringstream command;
command<<"cd ; python3 piap.py "<<u<<" "<<rho;
if(!(in = popen(command.str().c_str(), "r"))){
    cout<<"some problem with the subprocess"<<endl;
}

Я также пытался звонить python3.5 в popen но это ничего не изменяет.

Можно найти целый cpp файл here:http://pastebin.com/KeXsgzjx, Но остальное - просто определенный для проблемы шаблон.

Код компилирует очень хорошо, но во время времени выполнения, он производит это сообщение об ошибке:

Фатальная ошибка Python: Py_Initialize: Невозможно получить кодирование локали
Файл "/home/lhk/programs/clion-2016.1.2/bin/gdb/lib/python2.7/encodings/init.py", строка 123 повышения CodecRegistryError, \^ SyntaxError: недопустимый синтаксис

Текущий поток 0x00007ffff7fd1700 (новый вызов сначала): Прерванный (выведенное ядро)

Существуют дубликаты этого вопроса:

Фатальная ошибка Python: Py_Initialize: Невозможно получить кодирование локали... SyntaxError: Прерванный недопустимый синтаксис (выведенное ядро)

Bash пытается запустить Python на неизвестной команде и сбоях в Py_Initialize

К сожалению, решения не работают на меня:

  • Я не установил pythonpath
  • Мой сценарий Python указывает точную версию с #!/usr/bin/python3.5
  • Мой /usr/lib/command-not-found явно вызовы /usr/bin/python3

И существует еще больше к этой ошибке.

  1. Это, кажется, связано с моим IDE, Clion. Вы видите это в сообщении об ошибке. Так или иначе интерпретатор Python пытается загрузить init сценарий из clion распределения
  2. Это только появляется во время отладки. Когда работал в режиме выпуска, popen (), вызов работает просто великолепно.

Я проверил, какая версия Python была настроена как значение по умолчанию в Clion, это 3.5, и корректный интерпретатор, также.

Я в замешательстве, почему неправильный интерпретатор выбран?

3
задан 13 April 2017 в 15:23

1 ответ

Я получил подобную проблему в другой контекст (при вызове python3 сценария от интерактивной среды программа графика VisIt). Причина это происходит, состоит в том, что, по-видимому, переменные среды (в частности, PATH) установлены на локальные значения, которые отключают установку в масштабе всей системы Python3.

можно обойти это под управлением Python 3 в чистый лист env . Должен выглядеть примерно так:

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;
}
2
ответ дан 1 December 2019 в 16:57

Другие вопросы по тегам:

Похожие вопросы: