問題: PythonをC++で埋め込むと、奇妙な例外がスローされます。C++でのPythonの埋め込み
プログラム:
bool embedd::execute_python(std::string location)
{
if (std::ifstream(location))
{
const char* file_location = location.c_str();
FILE* file_pointer;
// Initialize the Python interpreter
Py_Initialize();
file_pointer = _Py_fopen(file_location, "r");
// Run the Python file
PyRun_SimpleFile(file_pointer, file_location);
// Finalize the Python interpreter
Py_Finalize();
return true;
}
return false;
}
上記のコードは何をすべきん:関数は最初の引数が渡されたPythonのファイルの有効な場所であるかどうかを確認する必要があります。ファイルが存在する場合は、Pythonファイルを実行する必要があります。
期待通りの結果が得られますか:はい、いいえ。間違って何が起こっているか
:
テストファイル1:
print("Hello world")
結果:正常に実行し、適切な出力に
テストファイル2取得:
from tkinter import *
root = Tk()
root.mainloop()
を
Result : Exception root = Tk() File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\Lib\tkinter__init__.py", line 1863, in init baseName = os.path.basename(sys.argv[0]) AttributeError: module 'sys' has no attribute 'argv'
他のファイルでテストしたところ、いつでも、tkinter、uuid、osなどのようなモジュール(any)がインポートされることが判明しました。同様の例外がスローされます。私が言及しているん3.5.2
リンク:これについて簡単に掘りに私のIDEのプロセスモニタは、例えばtk86t.dllため
Pythonのバージョンをロードしていないシンボルファイル「シンボルファイルがロードされていません」語りました: SO - 1いくつかの理由のために(窓C:\>python script.py -yourarguments
用などのように)有効なコマンドラインを期待TkがバグはここのPython 2.3から修正されている一方、テストファイル2つの輸入にBUGS
ありがとうございました!とても有難い! –