testpy.py
python
#!/usr/bin/env python def euclid(a, b): while b: a, b = b, a%b return a
$ pythonlinux
Python 2.7.6 (default, Jun 22 2015, 17:58:13) c++
[GCC 4.8.2] on linux2app
Type "help", "copyright", "credits" or "license" for more information.python2.7
>>> from testpy import euclid函數
>>> euclid(100,30)測試
10ui
>>> euclid(120,30)spa
30code
>>> euclid(120,48)
24
>>>
測試mytest.py
#!/usr/bin/env python from testpy import euclid num1= input("Please enter the first integer: ") num2= input("Please enter the second integer: ") print "The Greatest Common Divisor (GCD) is: ", euclid(num1,num2)
$ chmod +x mytest.py
$ ./mytest.py
Please enter the first integer: 120
Please enter the second integer: 48
The Greatest Common Divisor (GCD) is: 24
在c語言中調用python模塊中函數
/** * @file euclidpy.c * gcc -Wall -O2 -o euclidpy euclidpy.c -I/usr/include/python2.7 -L/usr/lib -lpython2.7 -Wl,-R/usr/local/lib */ #include <Python.h> #include <stdio.h> int main() { //初始化python Py_Initialize(); if (!Py_IsInitialized()) { printf("Python_Initialize failed\n"); return 1; } PyObject *pModule = NULL; PyObject *pFunc = NULL; PyObject *pArg = NULL; PyObject *result = NULL; PyRun_SimpleString("import sys"); //直接執行python語句 PyRun_SimpleString("import sys;sys.path.append('.')"); pModule = PyImport_ImportModule("testpy"); if (pModule == NULL) { printf("import module failed!\n"); return -1; } pFunc = PyObject_GetAttrString(pModule, "euclid"); pArg = Py_BuildValue("(i, i)", 120, 48); //調用函數,並獲得python類型的返回值 result =PyEval_CallObject(pFunc,pArg); //c用來保存c/c++類型的返回值 int c; //將python類型的返回值轉換爲c/c++類型 PyArg_Parse(result, "i", &c); //輸出返回值 printf("The Greatest Common Divisor (GCD) is:%d\n", c); Py_Finalize(); return 0; }
編譯和運行:
$ gcc -Wall -O2 -o euclidpy euclidpy.c -I/usr/include/python2.7 -L/usr/lib -lpython2.7 -Wl,-R/usr/local/lib
$ ./euclidpy
The Greatest Common Divisor (GCD) is:24