testpy.py
#!/usr/bin/env python
def euclid(a, b):
while b:
a, b = b, a%b
return a
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from testpy import euclid
>>> euclid(100,30)
10
>>> euclid(120,30)
30
>>> 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