popen().
を呼び出して、C++からpythonスクリプトを実行しようとしています。
重要なコードは次のようになります。
ostringstream command;
command<<"cd ; python3 piap.py "<<u<<" "<<rho;
if(!(in = popen(command.str().c_str(), "r"))){
cout<<"some problem with the subprocess"<<endl;
}
popen
でpython3.5
を呼び出してみましたが、何も変わりません。
ここでcppファイル全体を見つけることができます: 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:無効な構文Aborted(core dumped)
Bashは未知のコマンドでpythonを実行しようとし、Py_Initializeで失敗します
残念ながら、解決策は私にはうまくいきません:
#!/usr/bin/python3.5
で正確なバージョンを指定します/usr/lib/command-not-found
は明示的に/usr/bin/python3
を呼び出しますそして、このバグにはさらに多くのことがあります。
どのpythonバージョンがClionでデフォルトとして設定されているかを確認しました。これは3.5であり、正しいインタープリターでもあります。
私は迷っています、なぜ間違った通訳が選ばれているのですか?
異なるコンテキスト ( VisIt プロットプログラムのインタラクティブ環境からpython3スクリプトを呼び出す場合)で同様の問題が発生しました。これが発生する理由は、明らかに、環境変数(特に、PATH
)がPython3のシステム全体のインストールを無効にするローカル値に設定されているためです。
これを回避するには、 clean-slate env
でPython 3を実行します。次のようになります。
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;
}