把我的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"
时,它再次将输出打印为“enter the string This is Jon”,即它将提供整个输出两次。可能一个输出是由于python代码input=subprocess.Popen(cmd,stdin=PIPE)
,第二个输出是由于代码print proc.stdout.read()
我只想印一次。我该怎么办?我希望python变量接收java程序的所有输出,并使用该变量在屏幕上显示输出。另外,如果有对java程序的输入,我希望该用户输入将存储在python变量中的输入,并使用该变量,我希望将输入传递给java程序。我该怎么办?
您应该使用^{} ,而不是
stdout.read
。communicate
的参数是子进程的输入。另外,当您不希望shell执行您的命令时,传递shell=True
也是一个坏主意。相反,请将参数作为列表传递:相关问题 更多 >
编程相关推荐