【问题标题】:Reading Java system.out.print via Python subprocess [duplicate]通过 Python 子进程读取 Java system.out.print [重复]
【发布时间】: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 读取,因此您必须使用适当的键组合写出“用户输入”以指示输入已停止。

标签: java python


【解决方案1】:
p1 = subprocess.Popen(["/usr/bin/java", "MyClass"], stdout=subprocess.PIPE)
print p1.stdout.read() 

【讨论】:

  • 谢谢,我能够使用这个得到提示:
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
相关资源
最近更新 更多