从 Python 调用带有“子进程”的 Java 应用程序并读取 Java 应用程序输出
Posted
技术标签:
【中文标题】从 Python 调用带有“子进程”的 Java 应用程序并读取 Java 应用程序输出【英文标题】:Calling Java app with "subprocess" from Python and reading the Java app output 【发布时间】: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这个。 【参考方案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()
有效以上是关于从 Python 调用带有“子进程”的 Java 应用程序并读取 Java 应用程序输出的主要内容,如果未能解决你的问题,请参考以下文章
从 django 子进程调用 python,mysql not found 错误
如何从python子进程调用LC_ALL = C排序[重复]