从Java运行Python程序的三种方法

本文详细介绍了如何从Java程序中运行Python代码,包括使用Runtime类、ProcessBuilder类以及集成Jython将Python解释器嵌入Java,实现平台无关性的Python调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一周前,我介绍了

http://bytes.com/topic/python/insigh...hon-together-c 。 从那时起,我意识到也许人们对C的编程不那么多。也许人们用Java编写程序!

在这里,我介绍了三种不同的从Java运行Python程序的选项。 首先使用(旧的)Runtime类,然后使用ProcessBuilder类,最后使用Jython(用Java编写的Python解释器)将Python代码嵌入Java。

运行时方法

首先,使用Runtime类,这是做旧方法。


import java.io.*; 
class test1{
public static void main(String a[]){
try{ 
String prg = "import sys\nprint int(sys.argv[1])+int(sys.argv[2])\n";
BufferedWriter out = new BufferedWriter(new FileWriter("test1.py"));
out.write(prg);
out.close();
int number1 = 10;
int number2 = 32;
Process p = Runtime.getRuntime().exec("python test1.py "+number1+" "+number2);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
int ret = new Integer(in.readLine()).intValue();
System.out.println("value is : "+ret);
}catch(Exception e){}
}
} 
我们首先制作一个Java字符串prg,其中包含我们的Python程序,该字符串保存在文件“ test1.py”上。 接下来,我们使用Runtime类中的exec方法在系统上运行Python解释器。 我们从Runtime类返回的输出流中读取输出,并将其转换为Java int。

我将上面的源代码保存为“ test2.java”。 我输入了以下内容;

javac test2.java

要执行它:

java test2

过程方法

我认为Runtime类的方法有些陈旧。 在最新的Java版本中,要使用的一个是ProcessBuilder类。 这为参数提供了更多的结构。


import java.io.*; 
class test2{
public static void main(String a[]){
try{ 
String prg = "import sys\nprint int(sys.argv[1])+int(sys.argv[2])\n";
BufferedWriter out = new BufferedWriter(new FileWriter("test1.py"));
out.write(prg);
out.close();
int number1 = 10;
int number2 = 32; 
ProcessBuilder pb = new ProcessBuilder("python","test1.py",""+number1,""+number2);
Process p = pb.start(); 
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
int ret = new Integer(in.readLine()).intValue();
System.out.println("value is : "+ret);
}catch(Exception e){System.out.println(e);}
}
} 
我把上面的保存为“ test2.java”。 然后我输入以下内容;

javac test2.java

要执行它:

java test2

Jython方法

Java应该是独立于平台的,并且调用本地应用程序(例如python)并不是非常独立于平台的。

有一个用Java编写的Python(Jython)版本,它允许我们将Python嵌入我们的Java程序中。 通常,当您要使用外部库时,一个障碍是编译并正确运行它,因此,我们将完成使用Jython构建和运行简单Java程序的过程。

我们首先获得jython jar文件:

http://www.jython.org/downloads.html

(当我写这篇文章时,最新版本是:Jython 2.5.3)

我将jython-2.5.3.jar复制到了Java程序所在的目录中。 然后,我键入以下程序,该程序与前两个程序的功能相同; 取两个数字,将它们发送给python,然后将它们相加,然后python将其返回给我们的Java程序,该数字将输出到屏幕上:


import org.python.util.PythonInterpreter; 
import org.python.core.*;  
class test3{
public static void main(String a[]){ 
PythonInterpreter python = new PythonInterpreter(); 
int number1 = 10;
int number2 = 32; 
python.set("number1", new PyInteger(number1));
python.set("number2", new PyInteger(number2));
python.exec("number3 = number1+number2");
PyObject number3 = python.get("number3");
System.out.println("val : "+number3.toString());
}
} 
我将此文件称为“ test3.java”,将其保存,然后执行以下操作对其进行编译:

javac -classpath jython-2.5.3.jar test3.java

下一步是尝试运行它,我可以通过以下方式进行操作:

java -classpath jython-2.5.3.jar:。 测试3

现在,这使我们能够以独立于平台的方式使用Java中的Python。 这有点慢,实际上感觉就像是所介绍的三种方法中最慢的一种。 尽管如此,它还是一个用Java编写的Python解释器,还是很酷的。

From: https://bytes.com/topic/python/insights/949995-three-ways-run-python-programs-java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值