C++呼叫 python 函式及返回值的處理【元組,字串...】
阿新 • • 發佈:2019-01-30
http://www.cnblogs.com/DxSoft/archive/2011/04/01/2002676.html
Python 指令碼 py_test.py :
#coding:utf-8
def get_int( ):
a = 10
b = 20
return a + b
def get_str( s1, s2 ):
#return s1 + s2
#return 'Hello , TY'
return ('Hello, World', 10, 20)
C 函式:
#include <stdio.h> #include <stdlib.h> #include <python.h> #pragma comment(lib, "python27_d.lib") int main() { PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pRetVal; Py_Initialize(); if (!Py_IsInitialized()) return -1; //load py script filename PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.path.append('./')"); pName = PyString_FromString("py_test");// py_test.py pModule = PyImport_Import(pName); if (!pModule){ printf("cant find py_test.py"); getchar(); return -1; } pDict = PyModule_GetDict(pModule); if (!pDict) return -1; //find function name pFunc = PyDict_GetItemString(pDict, "get_str"); if (!pFunc || !PyCallable_Check(pFunc)){ printf("cant find function [add]"); getchar(); return -1; } //push args to stack pArgs = PyTuple_New(2); PyTuple_SetItem(pArgs, 0, Py_BuildValue("s", "Hello, ")); PyTuple_SetItem(pArgs, 1, Py_BuildValue("s", "C_Python")); //call python function pRetVal = PyObject_CallObject(pFunc, pArgs); if (pRetVal == NULL){ printf("CalllObject return NULL"); return -1; } char* ret_str; int w = 0 , h = 0; //解析元組 PyArg_ParseTuple(pRetVal, "s,i,i",&ret_str, &w, &h); printf("%s, %d, %d\n", ret_str, w, h); //解析字串 //printf("function return value:%s\r\n", PyString_AsString(pRetVal)); Py_DECREF(pName); Py_DECREF(pArgs); Py_DECREF(pModule); Py_DECREF(pRetVal); //close python Py_Finalize(); getchar(); return 0; }