java 调用python脚本的方法 java调用python脚本文件
这几天老师要求我作项目时使用Java调取python脚本得到值,搜索几天,现在记录一下
1. 直接在java类里面执行python语句
一开始我就是搜索的此方法,但这个方法我自己认为没有什么比较大的意义,但还是贴上来
我用的是springboot来开发项目,要先导入maven依赖
org.python
jython-standalone
2.7.0
然后代码如下
import org.python.util.PythonInterpreter
public class JavaRunPython {
public static void main(String[] args) {
//首先调用python的解释器
PythonInterpreter interpreter = new PythonInterpreter();
//选择执行的的Python语句
interpreter.exec("print ("hello java调用python");
}
}
2. java调取python脚本
此方法python脚本中不能引入其他的库(比如cv2,numpy等,当初在这里面耗了好久)
此方法依然要引入jython依赖。
先给出python代码:
def add(a, b):
return a + b
java代码如下:
PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile("python文件的绝对地址");
// 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型
PyFunction pyFunction = interpreter.get("add", PyFunction.class);
//调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”
PyObject pyobj = pyFunction.__call__(new PyString("hello"), new PyString("java"));
System.out.println("the anwser is: " + pyobj);
3. ***使用Runtime.getRuntime()执行python文件,极度推荐
此方法可以使用其他库,可以传递参数,也可以使用输出流获取输出值
先给出Java代码:
try {
String[] args1 = new String[] { "python", "python文件的绝对地址", "参数一", "参数二" };
Process proc = Runtime.getRuntime().exec(args1);// 执行py文件
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
proc.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
python代码:
import sys
#导入sys库用来接收参数
def add(a, b):
return a + b
if __name__ == '__main__':
a = []
#用循环向数组a中添加参数,自动过滤前两个
for i in range(1, len(sys.argv)):
a.append((sys.argv[i]))
add(a[0],a[1])
Java代码如果在idea中无法运行,string数组中第一个值可以写成python.exe的绝对地址,亲测有效。
再说说Runtime.getRuntime()
官方文档对其的说明:
ProcessBuilder.start()和Runtime.exec两个方法会生成一个本地的进程,然后返回一个Processs子类的实例。通过这个实例可以控制进程以及获得关于进程的信息。这个Process类为进程提供可用于执行来自的输入的方法,然后执行输出到这个进程中,等待完成后,检查进程退出时的状态,然后停止这个进程。——换句话说,这个实例就是监视整个进程的。
通过Process的getInputStream(),getOutputStream()和getErrorStream()方法可以得到输入输出流,然后通过InputStream可以得到程序对控制台的输出信息,通过OutputStream可以给程序输入指令,这样就达到了程序的交换功能。
java 调用python脚本的方法 java调用python脚本文件java 调用python脚本的方法 java调用python脚本文件java 调用python脚本的方法 java调用python脚本文件java 调用python脚本的方法 java调用python脚本文件java 调用python脚本的方法 java调用python脚本文件java 调用python脚本的方法 java调用python脚本文件java 调用python脚本的方法 java调用python脚本文件java 调用python脚本的方法 java调用python脚本文件java 调用python脚本的方法 java调用python脚本文件