2013-03-13 5 views
4

파이썬에서 사용자 지정 스크립트를 실행해야하는 응용 프로그램 용으로 파이썬 3 엔진을 임베드하는 데 문제가 있습니다. 스크립트가 완전히 다르고 때로는 사용자가 제공 할 수도 있기 때문에 나는 각 실행을 격리시키고 서로 다른 스크립트의 실행 사이에 데이터를 보존 할 필요가 없다.두 번째 파이썬 실행이 실패합니다.

내 솔루션은 Py_InitializePy_Finalize 사이의 각 실행을 래핑하는 것입니다.

void ExecuteScript(const char* script) 
{ 
Py_Initialize(); 

PyRun_SimpleString(script); 

Py_Finalize(); 
} 

그러나이 특정 파이썬 스크립트의 스크립트로 실행되는 두 번째 실패 : 그것은 그런 식으로 뭔가를 보이는

파이썬 스크립트는 다음과 같습니다
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 

:

class Data: 
    value1 = 'hello' 
    value2 = 0 

import copy 

d = Data() 
dd = copy.copy(d) 
print ('done!') 

처음 보았 듯이 스크립트를 처음 실행하면 '완료되었습니다.' 인쇄되었다. 그러나 두 번째로 복사 기능 내에서 예외가 발생합니다.

파이썬 엔진이 첫 번째 초기화 완료 후 이상한 상태로 남겨진 것처럼 보입니다. 참고로, 이것은 파이썬 3입니다.

또한 파이썬 2.7에는이 문제가 없었습니다.

나는 더 나은 것을 밝힐 수있는 다른 예제가있을 것 같지만 아직 찾을 시간이 없었습니다. 테스트 프로젝트의

전체 소스는 여기에서 찾을 수 있습니다 : https://docs.google.com/file/d/0B86-G0mwwxZvNGpoM1Jia3E2Wmc/edit?usp=sharing

주, 그것은 파이썬 분포를 포함하기 때문에 파일이 8메가바이트입니다.

이 문제를 해결하는 방법에 대한 아이디어는 높이 평가됩니다.

편집이 : https://docs.google.com/file/d/0B86-G0mwwxZvbWRldTd5b2NNMWM/edit?usp=sharing

편집 : 나는 또한 파이썬 3 파이썬 2.7 사이를 전환 할 플래그를 포함하는 프로젝트의 복사본을 넣어 (파일 31 메가 바이트) 글쎄, 난 Python3.2 테스트와 일했다 벌금. 따라서 Python3.3에서만 버그로 보입니다. 문제로 추가 : http://bugs.python.org/issue17408#

답변