1、java调用Python(无参数)
#coding:utf-8 def sum(): print "hello world" if __name__ == '__main__': sum()
package com; import java.io.BufferedReader; import java.io.InputStreamReader; public class test7 { public static void main(String[] args) throws Exception { System.out.println("start"); String[] path = new String[] { "python", "C:\\Users\\HQH\\Desktop\\demo.py"}; Process pr=Runtime.getRuntime().exec(path); BufferedReader in = new BufferedReader(new InputStreamReader( pr.getInputStream())); String line; while ((line = in.readLine()) != null) { System.out.println(line); } in.close(); pr.waitFor(); System.out.println("end"); } }2、java调用Python(有参数)
#coding:utf-8 import sys def sum(a,b): print a+'+'+b+'='+str(int(a)+int(b)) if __name__ == '__main__': a=[] #遍历传参从1开始 for i in range(1, len(sys.argv)): num = sys.argv[i] a.append(num) #存储参数从0开始,数据类型为Str sum(a[0],a[1])
package com; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; public class test8 { public static void main(String[] args) throws Exception { System.out.println("请输入两个整数:"); Scanner cin=new Scanner(System.in); String num1=cin.next(); String num2=cin.next(); System.out.println("start"); String[] path = new String[] { "python", "C:\\Users\\HQH\\Desktop\\demo1.py", num1,num2}; Process pr=Runtime.getRuntime().exec(path); BufferedReader in = new BufferedReader(new InputStreamReader( pr.getInputStream())); String line; while ((line = in.readLine()) != null) { System.out.println(line); } in.close(); pr.waitFor(); System.out.println("end"); } }3、C++调用Python
配置VS环境:
①添加include下文件
如:D:\Python27\include
项目>属性>C/C++>常规>附加包含目录下
②添加libs下文件
如:D:\Python27\libs
1)项目>属性>配置属性>VC++目录>库目录
或
2)项目>属性>配置属性>链接器>常规>附加库目录
测试代码:
#include "Python.h" #include<iostream> using namespace std; int main() { Py_Initialize(); //初始化 PyRun_SimpleString("print 'hello'"); Py_Finalize(); // 释放资源 system("pause"); }出错调试:
python27_d.lib找不到,打开源码,删除即可(pyconfig.h)
注意加载路径,模块名,函数名,传参与否
def test_add(a, b): print 'add ', a, ' and ', b return a+b
#include "Python.h" #include <iostream> using namespace std; int main() { Py_Initialize(); // 初始化 // 模块所在路径 string chdir_cmd = string("sys.path.append('C:/Users/HQH/Desktop')"); const char* cstr_cmd = chdir_cmd.c_str(); //导入sys,添加模块路径 PyRun_SimpleString("import sys"); PyRun_SimpleString(cstr_cmd); // 加载模块 PyObject* moduleName = PyString_FromString("demo2"); //模块名,demo2.py PyObject* pModule = PyImport_Import(moduleName); if (!pModule) // 加载模块失败 { cout << "[ERROR] Python get module failed." << endl; return 0; } cout << "[INFO] Python get module succeed." << endl; // 加载函数 PyObject* pv = PyObject_GetAttrString(pModule, "test_add"); if (!pv || !PyCallable_Check(pv)) // 验证是否加载成功 { cout << "[ERROR] Can't find funftion (test_add)" << endl; return 0; } cout << "[INFO] Get function (test_add) succeed." << endl; // 设置参数 PyObject* args = PyTuple_New(2); // 2个参数 PyObject* arg1 = PyInt_FromLong(4); // 参数一设为4 PyObject* arg2 = PyInt_FromLong(3); // 参数二设为3 PyTuple_SetItem(args, 0, arg1); PyTuple_SetItem(args, 1, arg2); // 调用函数 PyObject* pRet = PyObject_CallObject(pv, args); // 获取参数 if (pRet) // 验证是否调用成功 { long result = PyInt_AsLong(pRet); cout << "result:" << result<<endl; } Py_Finalize(); // 释放资源 system("pause"); return 0; }总结:
①Java调用Python,是调用全部,也就是运行这个模块
②C++调用Python,只是调用一个函数。