2013-03-13 63 views
4

我在爲需要在python中運行自定義腳本的應用程序嵌入python 3引擎時出現問題。由於腳本可能完全不同,有時用戶提供,因此我試圖使每個執行都是獨立的,並且不需要在執行不同腳本之間保留任何數據。第二個python執行失敗

因此,我的解決方案是將每個執行包括在Py_InitializePy_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#

回答