Possible Duplicate:
Calling Java app with “subprocess” from Python and reading the Java app output
基本上我正在寻找的是,我想在使用 python 运行时与 java 程序进行交互,这样我就可以访问它的输出并将输入传递给它。 我已经成功使用 python 运行 Java 程序。我想知道我可以在 python 程序中访问 java 程序的输出吗? 例如。 在java程序中:System.out.println("请输入编号。"); 在 python 中,我应该能够将“Enter no”作为字符串获取,并将值从 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,使用这些调用就应该适合您。
关于java - 使用python与java程序交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352508/