【问题标题】:Calling Java app with "subprocess" from Python and reading the Java app output从 Python 调用带有“子进程”的 Java 应用程序并读取 Java 应用程序输出
【发布时间】:2011-01-24 05:02:45
【问题描述】:

读取从 Python 调用的 Java 应用程序的输出(即通过 System.out.println)的最佳方式是

subprocess.Popen("java MyClass", shell=True)

不写入和读取文件? (使用 Jython 等是不可能的解决方案)

【问题讨论】:

  • 旁注:在使用 subprocess.Popen 时,更喜欢下面 S. Mark 给出的语法(即第一个参数的列表,以及 shell 的默认值 (False)。有关更多信息,请参阅logilab.org/blogentry/20469这个。

标签: java python communication


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

【讨论】:

  • 使用 Popen.communicate() 执行阻塞读取,直到弹出的进程终止。
【解决方案2】:

我刚刚找到了解决方案:

p = subprocess.Popen("java MyClass",
          shell=True,
          stdout=subprocess.PIPE)
output, errors = p.communicate()

S.Mark 的也不错!

【讨论】:

  • 由于通配符,我无法通过将列表传递给 Popen 来调用 javac src/*.java,不知道为什么。给出一个字符串并使用communicate() 有效
猜你喜欢
  • 2018-07-03
  • 2017-09-07
  • 1970-01-01
  • 2017-11-28
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多