从Java运行Python程序的三种方法
一周前,我介绍了
http://bytes.com/topic/python/insigh...hon-together-c
。从那以后,我意识到也许人们在C中没有太多编程。也许人们在Java编写程序!
在这里,我提出了三种不同的选项,从Java运行Python程序;首先使用(旧的)运行时类,然后使用ProcessBuilder类,最后将Python代码嵌入Java,与Jython(用Java编写的Python解释器!)
运行时方法
首先,让某件事是运行时类的旧方法。
- 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){}
- }
- }
我们首先制作包含我们的Python程序的Java String PRG,该字符串保存在" test1.py"文件上。接下来,我们将在系统上运行Python解释器,并在运行时类中使用EXEC方法。我们读取从运行时类返回的输出流的输出,然后将其转换为Java INT。
我将上述源代码保存为" test2.java"。我键入以下内容;
Javac test2.java
执行它:
Java test2
过程方法
我认为运行时类方法有点古老。在最新的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.3.jar test3.java
下一步是尝试运行它,我会做以下方式:
Java -ClassPath Jython -2.5.3.3.jar:。 test3
现在,这使我们能够以独立的方式使用来自Java的Python。这有点慢,实际上感觉就像是三种呈现方法中最慢的方法。尽管如此,它还是很酷的,它是用爪哇写的python解释器...
评论已关闭