使用python与java程序进行交互

可能重复:
用Python中的“subprocess”调用Java应用程序并读取Java应用程序输出

基本上我正在寻找的是,我想与java程序进行交互,而其运行使用Python,所以我可以访问其输出,并将input传递给它。 我设法使用python运行一个Java程序。 我想知道我可以访问我的Python程序中的Java程序的输出。 例如。 在java程序中:System.out.println(“Enter no。”); 在Python中,我应该能够得到“input否”作为string,并从python.a传递到Java程序的价值

我做了什么,直到不:Python程序:

import sys import os.path,subprocess def compile_java(java_file): subprocess.check_call(['javac', java_file]) def execute_java(java_file): java_class,ext = os.path.splitext(java_file) cmd = ['java', java_class] subprocess.call(cmd, shell=False) def run_java(java_file): compile_java(java_file) execute_java(java_file) 

Java程序:

 import java.io.*; import java.util.*; class Hi { public static void main(String args[])throws IOException { Scanner t=new Scanner(System.in); System.out.println("Enter any integer"); int str1=t.nextInt(); System.out.println("You entered"+str1); } } 

谢谢:)

如果您只需要从Java程序的非交互式执行中获取输出,请使用subprocess.check_output而不是subprocess.call。

http://docs.python.org/library/subprocess.html

你需要Python 2.7或更新的check_output才能使用。

如果您需要与Java程序进行交互,可以使用Popen.communicate进行交互,在这里您可以读取进程的输出并使用文件描述符将内容发送到输入。

您也可以使用pexpect python库来自动执行这种交互,pexpect会抽象出使用Popen.communicate所涉及的大量工作。

请注意,这些技术适用于需要Python程序进行交互的任何类型的可执行文件,而不仅仅是Java; 只要它使用stdin和stdout,使用这些调用应该为你工作。

最简单的方法是使用Jython,它是一个在JVM中运行的完整Python实现,可以与本地Java代码交互。 但是,如果您想使用CPython,并且通常继续沿着上面勾画的路径,则需要创建一个可以与之交互的实时Python Popen对象。 例如:

 import sys import os.path,subprocess def compile_java(java_file): subprocess.check_call(['javac', java_file]) def execute_java(java_file): java_class,ext = os.path.splitext(java_file) cmd = ['java', java_class] return subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) def run_java(java_file): compile_java(java_file) process = execute_java(java_file) for i in range(10): process.stdin.write(str(i) + "\n")