一周前,我介绍了
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