【发布时间】:2013-04-19 21:30:42
【问题描述】:
我正在运行一个 Python 脚本,该脚本运行一个需要非确定性用户输入的 Java 类:
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(),但没有显示任何输出。有没有办法显示没有回车的输入提示?
编辑
例如,如果 Java 类包含以下内容:
System.out.println("Message 1);
System.out.println("Message 2);
System.out.print("Enter a number:")
运行纯 Java 代码将显示所有 3 行。
通过 Python 运行的代码只会显示以下内容:
Message 1
Message 2
【问题讨论】:
-
可以使用
strip去掉回车:inline = p.stdout.readline().strip() -
我很困惑。所有 System.out 打印都是针对 STDOUT 完成的,因此读取它应该没有什么不同。但是,System.in 正在从 STDIN 读取,因此您必须使用适当的键组合写出“用户输入”以指示输入已停止。