从 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排序[重复]

如果使用 python 和子进程从 pycharm 调用 gsutil 不起作用,“无法导入名称 _common”

Python 子进程调用返回“找不到命令”,终端正确执行

带有管道和大文件的 Python 子进程

为啥 Python 不能通过子进程执行 java.exe?