Я пытаюсь выполнить сценарий 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 (новый вызов сначала): Прерванный (выведенное ядро)
Существуют дубликаты этого вопроса:
Bash пытается запустить Python на неизвестной команде и сбоях в Py_Initialize
К сожалению, решения не работают на меня:
#!/usr/bin/python3.5
/usr/lib/command-not-found
явно вызовы /usr/bin/python3
И существует еще больше к этой ошибке.
Я проверил, какая версия Python была настроена как значение по умолчанию в Clion, это 3.5, и корректный интерпретатор, также.
Я в замешательстве, почему неправильный интерпретатор выбран?
Я получил подобную проблему в другой контекст (при вызове 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;
}