【发布时间】:2012-03-09 04:05:57
【问题描述】:
将我的 python 程序视为 input.py
import os.path,subprocess
from subprocess import STDOUT,PIPE
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]
proc = subprocess.Popen(cmd,stdout=PIPE,stderr=STDOUT)
input=subprocess.Popen(cmd,stdin=PIPE)
print proc.stdout.read()
我使用的Java文件是Hi.java
import java.util.*;
class Hi
{
public static void main(String args[])
{
Scanner t=new Scanner(System.in);
System.out.println("Enter any string");
String str=t.nextLine();
System.out.println("This is "+str);
int a=5;
System.out.println(a);
}
}
当我调用input.execute_java(Hi.hava) 时,输出为"Enter the string",当我输入字符串说"Jon" 时,它再次将输出打印为“输入字符串This is Jon”,即它提供了两个完整的输出次。由于 python 代码input=subprocess.Popen(cmd,stdin=PIPE) 可能有一个输出,而代码print proc.stdout.read() 可能是第二个输出
我希望它只打印一次。我该怎么办?我希望我的 python 变量接收 java 程序的所有输出,并使用该变量将输出显示在屏幕上。此外,如果有 java 程序的输入,我希望该用户输入将存储在我的 python 变量中的输入,并使用这个变量,我想将输入传递给 java 程序。我该怎么办?
【问题讨论】:
标签: java python subprocess