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