在java中调用python脚本
推荐使用第三种方法,因为只有第三种方法使用Runtime.getRuntime()
才能执行含有第三方库(numpy,matlab,pandas等库)的python脚本。
方法一:在java程序中执行Python语句
1.首先在maven中添加依赖
<dependency> <groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.7.0</version></dependency>
2.使用Jpython中的PythonInterpreter执行Python语句
public class Tool{ public static void main(String [] args){ PythonInterpreter interpreter = new PythonInterpreter();interpreter.exec("print("This is a JPython text")"); interpreter.exec("print(2+3)"); }}
方法二:java执行python脚本(不支持第三方库)
1.首先在maven中添加依赖(也是依赖Jpython包)
<dependency> <groupId>org.python</groupId> <artifactId>jython-standalone</artifactId> <version>2.7.0</version></dependency>
2.创建一个Python脚本
#当我们的Python脚本中有汉字的时候,需要在脚本的第一行写coding = utf-8 来告诉编译器编码方式是什么# -*- coding: UTF-8 -*-a = 'This is a test'print(a)
3.在java中执行python脚本
public class Tool{ public static void main(String [] args){ PythonInterpreter interpreter = new PythonInterpreter();interpreter.execfile("./text.py");//放脚本的位置interpreter.cleanup();interpreter.close(); }}
方法三:使用Runtime.getRuntime()执行Python脚本
1.不需要传递参数的例子
先创建一个简单的调用第三方库的Python脚本
import numpy as npa = np.arange(10)print(a)
然后使用 Runtime.getRuntime() 方法执行python脚本
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public class Tool { public static void main(String[] args) { try { Process proc = Runtime.getRuntime().exec("test.py");//执行脚本 //用输入输出流来截取结果 BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); String line = null; while((line = reader.readLine()) != null){ System.out.println(line); } reader.close(); proc.waitFor(); } catch (IOException e) { throw new RuntimeException(e); } catch (InterruptedException e) { throw new RuntimeException(e); } }}
2.需要传递参数的例子
import sysdef sum(a, b, c):return a+b+cif __name__ == "__main__":a=(int(sys.argv[1]))b=(int(sys.argv[2]))c=(int(sys.argv[3]))s=sum(a,b,c)print("finish!!!")print(s)
sys.argv用于获取参数url1,url2,乃至更多,sys.argv[0]代表python程序名
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Scanner;public class Tool { public static void main(String [] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt();int b = scanner.nextInt();int c = scanner.nextInt(); try { String[] my_args =new String[] {"python","test.py",String.valueOf(a),String.valueOf(b),String.valueOf(c)}; Process proc = Runtime.getRuntime().exec(my_args);//执行脚本 BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream())); String line = null; while((line = reader.readLine()) != null){ System.out.println(line); } reader.close(); proc.waitFor(); } catch (IOException e) { throw new RuntimeException(e); } catch (InterruptedException e) { throw new RuntimeException(e); } }}
my_args数组里面存放的参数{“python”,“test.py”,String.valueOf(a),String.valueOf(b),String.valueOf©},第一个是固定的就写’python‘,第二个是我们要执行的python脚本的位置(注意路径),后面的是我们要传递的参数也就是url1,url2等等(和Python脚本所接收的内容互相对应)
这种方式我们需要使用输入流输出流BufferedReader来截取结果
来源地址:https://blog.csdn.net/weixin_48958956/article/details/128333340
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341