The meaning of calling a Python script in C + + is no, at least you can think of it as a dynamic link library in textual form,
Need time can also change a change, as long as not change the interface, C + + program once compiled, and then change is not so convenient
Look at Python code first.
| Code: |
#test function
def add (A, B):
print "In Python function add"
print "a =" + str (a)
print "b =" + str (b)
print "ret =" + str (A+B)
Return
def foo (a):
print "In Python function foo"
print "a =" + str (a)
print "ret =" + str (A * a)
Return
|
Save the Python code above as pytest.py
Next comes the code for C + +
| Code: |
#include "Python.h"
int main (int argc, char** argv)
{
Initialize Python
Before using a Python system, you must use Py_initialize to
To initialize. It will load the Python built-in module and add the system path
To the module search path. This function does not return a value, check the system
The success of initialization requires the use of py_isinitialized.
Py_initialize ();
Check if initialization is successful
if (! Py_isinitialized ())
{
return-1;
}
Add Current Path
Runs the input string directly as Python code, returning 0
Indicates success, 1 indicates an error. Most of the time the error is due to the string
There is a syntax error in the.
pyrun_simplestring ("Import sys");
Pyrun_simplestring ("Sys.path.append ('./')");
Pyobject *pname,*pmodule,*pdict,*pfunc,*pargs;
Load a script named Pytest
PName = pystring_fromstring ("Pytest");
Pmodule = Pyimport_import (pName);
if (!pmodule)
{
printf ("Can ' t find pytest.py");
GetChar ();
return-1;
}
Pdict = Pymodule_getdict (pmodule);
if (!pdict)
{
return-1;
}
Find the function named add
PFunc = pydict_getitemstring (pdict, "add");
if (!pfunc | |!) Pycallable_check (PFunc))
{
printf ("Can ' t find function [Add]");
GetChar ();
return-1;
}
parameter in stack
*pargs;
PArgs = Pytuple_new (2);
pyobject* Py_buildvalue (char *format, ...)
Convert C + + variables into a Python object. When needed from
This function is used when C + + passes variables to python. This function
A bit similar to C's printf, but in a different format. The commonly used formats are
s represents a String,
I represents an integer variable,
F represents a floating-point number,
O represents a Python object.
Pytuple_setitem (PArgs, 0, Py_buildvalue ("L", 3));
Pytuple_setitem (PArgs, 1, Py_buildvalue ("L", 4));
Calling the Python function
Pyobject_callobject (PFunc, PArgs);
The following is the Find function foo and execute foo
PFunc = pydict_getitemstring (pdict, "foo");
if (!pfunc | |!) Pycallable_check (PFunc))
{
printf ("Can ' t find function [foo]");
GetChar ();
return-1;
}
PArgs = pytuple_new (1);
Pytuple_setitem (PArgs, 0, Py_buildvalue ("L", 2)); //
Pyobject_callobject (PFunc, PArgs);
Py_decref (PName);
Py_decref (PArgs);
Py_decref (Pmodule);
Close Python
Py_finalize ();
return 0;
}
|
Compile options, you need to manually specify Python's include path, and link path,
g++ Python.cpp-o python-i/usr/include/python2.5-l/usr/lib/python2.5-lpython2.5
How Python is called in C/