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 pythonfrom testpy import euclidnum1= 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#include 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