2013-04-25 49 views
0

阅读是System.out.print Java的我正在运行,需要不确定性用户输入一个Java类的Python脚本:通过Python子

import sys 
import subprocess 
from subprocess import Popen, PIPE 

p = Popen("java myclass", shell=True, stdout=subprocess.PIPE) 

while True: 
    inline = p.stdout.readline() 
    if not inline: 
     break 

sys.stdout.write(inline) 
sys.stdout.flush() 

当使用System.out.print()显示输出,正确显示输出。但是,用System.out.print()打印用户输入提示时,不会显示输出。我试着将p.stdout.readline()切换到p.stdout.read(),但是没有输出显示。有没有办法显示没有回车的输入提示?

EDIT

例如,如果Java类包含下列:

System.out.println("Message 1); 
System.out.println("Message 2); 
System.out.print("Enter a number:") 

运行纯Java代码将显示所有的3行。

通过Python的运行将仅显示以下的代码:

Message 1 
Message 2 
+0

可以使用'strip'以除去回车:'直列= p.stdout.readline()条() ' – 2013-04-25 20:26:54

+0

我很困惑。所有System.out打印都是通过STDOUT完成的,所以阅读它应该没有什么不同。但是,System.in正在从STDIN读取数据,因此您必须使用适当的键组合键写出“用户输入”以指示输入已停止。 – CodeChimp 2013-04-25 20:28:18

回答

2
p1 = subprocess.Popen(["/usr/bin/java", "MyClass"], stdout=subprocess.PIPE) 
print p1.stdout.read() 
+0

谢谢,我能够使用这个获得提示: – 2013-04-25 20:56:07