子流程:不输出

时间:2012-11-29 19:09:43

标签: java python subprocess ipc stdout

我正在使用子进程模块启动子进程(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

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

2 个答案:

答案 0 :(得分:2)

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

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

Re:想要在stdout上执行非阻塞读取,请参阅此other answer

答案 1 :(得分:0)

这对我来说很有用,只有System.out.println("Hello World!");

的HelloWorld
import subprocess

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

out, err = p.communicate()
print out

这个答案已经涵盖了从子进程中读取非阻塞:python: nonblocking subprocess, check stdout