python
  • c++
  • c
  • python-c-extension
  • 2016-10-14 3 views 0 likes 
    0

    Python을 사용하여 함수에 수학 테스트를 수행하고 싶습니다.Python C 확장 : 엔진에서 매개 변수 추출

    #include <iostream> 
    #include <string> 
    #include <Python.h> 
    int RunTests() 
    { 
        Py_Initialize(); 
    
        PyRun_SimpleString("a=5"); 
        PyRun_SimpleString("b='Hello'"); 
        PyRun_SimpleString("c=1+2j"); 
        PyRun_SimpleString("d=[1,3,5,7,9]"); 
    
        //question here 
    
        Py_Finalize(); 
        return 0; 
    } 
    

    내 질문은 : 어떻게 매개 변수 a,b,c,d-PyObject의 추출 할 수 있습니다 파이썬에 액세스 할 수 있습니다 일반적인 프로그램이 무엇입니까?

    답변

    1

    PyRun_SimpleString()__main__ 모듈의 컨텍스트에서 코드를 실행합니다. 당신은이 모듈 및 조회 변수의 전역 사전 얻을 PyImport_AddModule()를 사용하여이 모듈에 대한 참조를 검색 할 수 있습니다

    PyObject *main = PyImport_AddModule("__main__"); 
    PyObject *globals = PyModule_GetDict(main); 
    PyObject *a = PyDict_GetItemString(globals, "a"); 
    

    를 대신이 방법을 사용하여 새 globals 사전을 만들고 실행하는 PyRun_String()를 사용하여 더 나을 수 있습니다 그 globals DICT의 맥락에서 코드 :

    PyObject *globals = PyDict_New(); 
    PyObject *a = PyRun_String("5", Py_single_input, globals, globals); 
    

    이 방법은, 먼저 몇 가지 변수에 식의 결과를 저장 한 후 __main__의 글로벌 범위를 추출 할 필요가 없습니다. 변수를 사용하여 중간 결과를 저장할 수 있으며 위 결과와 같이 globals에서 추출 할 수 있습니다.

    +0

    이것은 디버깅 할 때'a'에 SIGSEGV-segmentation fault 예외를 던지고 있습니다. 이 옆에 다른 전화를해야합니까? –

    +0

    'PyEval_GetLocals'가'NULL'을 돌려주고 있다는 것을 알았습니다! 이유를 아시겠습니까? 엔진은 내가 제공 한 코드에 따라 작동 중입니다. –

    +0

    죄송합니다. 코드가 작동하지 않습니다. http://stackoverflow.com/questions/40046330/python-c-extension-pyeval-getlocals-returns-null –

    관련 문제