1

我正在使用 subprocess 模块来启动一个子进程(java 程序)并连接到它的输出流(stdout)。但是当我尝试获取它的标准输出时,没有输出。

p= subprocess.Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/', shell=True, stdout=subprocess.PIPE, bufsize= 4024)

        out, err = p.communicate()
        print out

我也希望能够在其标准输出上执行非阻塞读取。我怎么能做这两件事?

4

2 回答 2

2

您需要将第一个 arg 拆分为您的 args 列表;我认为你没有得到输出的原因是你的 shell 正在寻找一个名为“java -Xmx256m -jar bin/HelloWorld.jar”的文件,该文件显然不会存在。你想["java", "-Xmx256m", "-jar", "bin/HelloWorld.jar"]作为第一个参数,比如:

cmd = ["java", "-Xmx256m", "-jar", "bin/HelloWorld.jar"]
cwd = r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/'
p = subprocess.Popen(cmd, cwd=cwd, shell=True, stdout=subprocess.PIPE, bufsize=4024 )

out, err = p.communicate()
print out

回复:想要在标准输出上执行非阻塞读取,请参阅这个其他答案

于 2012-11-29T19:44:39.480 回答
0

这对我有用,只有一个 HelloWorldSystem.out.println("Hello World!");

import subprocess

p= subprocess.Popen(["java","-jar","HelloWorld.jar"], shell=True, stdout=subprocess.PIPE, bufsize= 4024)

out, err = p.communicate()
print out

这个答案已经涵盖了从子进程中读取非阻塞: python:非阻塞子进程,检查标准输出

于 2012-11-29T19:38:07.370 回答