2012-05-21 3 views
8

저는 애완 동물 프로젝트에 파이썬을 삽입하려고합니다. 나는 다음과 같은 코드를 내 문제를 감소 : (Python C API) PyRun_StringFlags에 내장 함수가 없습니다.

#include <Python.h> 
#include "iostream" 

int main(int argc, char *argv[]) 
{ 
    Py_Initialize(); 

    PyObject *globals = Py_BuildValue("{}"); 
    PyObject *locals = Py_BuildValue("{}"); 

    PyObject *string_result = PyRun_StringFlags(
     "a=5\n" 
     "s='hello'\n" 
     "d=dict()\n" 
     , 
     Py_file_input, globals, locals, NULL); 
    if (PyErr_Occurred()) {PyErr_Print();PyErr_Clear();return 1;} 
    return 0; 
} 

가 (. 내가 참조를 청소하고 있지 않다 알고이 예입니다.)이

c++ $(python-config --includes) $(python-config --libs) test.cpp -o test 
로 컴파일 할 수 있습니다

나는 그것을 실행하는 경우

나는 다음과 같은 오류가 발생합니다 :

$ ./test 
Traceback (most recent call last): 
    File "<string>", line 3, in <module> 
NameError: name 'dict' is not defined 

이 내장 기능이로드되지 않습니다 보인다. 나는 또한 import 수 없습니다. 그 __import__가 누락되었습니다. 누락 된 모듈 또는 누락 된 항목을로드하려면 어떻게합니까?

감사합니다.

답변

7

한 가지 방법 :

g = PyDict_New(); 
if (!g) 
    return NULL; 

PyDict_SetItemString(g, "__builtins__", PyEval_GetBuiltins()); 

그리고 globalsg을 전달합니다.

+0

고마워요! 'PyEval_GetBuiltins'은 내가 필요한 것입니다. 나는 그걸 찾는 법을 알지 못했습니다. – Simon

4

또한 __main__ 모듈 네임 스페이스 내부의 코드를 실행할 수 있습니다 :

PyObject *globals = PyModule_GetDict(PyImport_AddModule("__main__")); 
PyObject *obj = PyRun_String("...", Py_file_input, globals, globals); 
Py_DECREF(obj); 

PyRun_SimpleStringFlags 내부적으로 무엇을 사실입니다.

관련 문제