我在爲需要在python中運行自定義腳本的應用程序嵌入python 3引擎時出現問題。由於腳本可能完全不同,有時用戶提供,因此我試圖使每個執行都是獨立的,並且不需要在執行不同腳本之間保留任何數據。第二個python執行失敗
因此,我的解決方案是將每個執行包括在Py_Initialize
和Py_Finalize
之間。它看起來就像這樣:
void ExecuteScript(const char* script)
{
Py_Initialize();
PyRun_SimpleString(script);
Py_Finalize();
}
然而,這無法爲特定的python腳本的腳本與執行第二次:
done!
Traceback (most recent call last):
File "<string>", line 8, in <module>
File "\Python33Test\Output\Debug\Python33\Lib\copy.py", line 89, in copy
rv = reductor(2)
TypeError: attribute of type 'NoneType' is not callable
的Python腳本是這樣的:
class Data:
value1 = 'hello'
value2 = 0
import copy
d = Data()
dd = copy.copy(d)
print ('done!')
正如你所看到的,腳本第一次執行'done!'被打印出來。但是第二次在複製功能中出現異常。
它看起來像第一次初始化完成後,python引擎處於一種奇怪的狀態。請注意,這是Python 3.
另外,注意到Python 2.7沒有這個問題是非常有趣的。
我猜可能有其他的例子可以更好地揭示發生了什麼,但我還沒有時間找到尚未。
測試項目的全部源可以在這裏找到: https://docs.google.com/file/d/0B86-G0mwwxZvNGpoM1Jia3E2Wmc/edit?usp=sharing
注意,該文件是8MB,因爲它包括蟒蛇分佈。
任何想法如何解決這個讚賞。
編輯:我也把含標誌到Python 3和Python 2.7之間切換的項目的副本(該文件是31 MB):https://docs.google.com/file/d/0B86-G0mwwxZvbWRldTd5b2NNMWM/edit?usp=sharing
編輯:嗯,我有Python3.2測試,它的工作精細。所以它似乎只是在Python3.3中的錯誤。作爲一個問題增加:http://bugs.python.org/issue17408#