2012-11-29 53 views
1

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

您需要的第一个参数分裂成你的参数列表;我认为你没有得到输出的原因是你的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 

回复:想执行非阻塞stdout上读取,看到这个other answer

+0

''java -Xmx256m -jar bin/HelloWorld.jar“'是我希望我的shell运行的命令...当我在shell上执行它时,它运行成功! – karensantana

+1

我明白 - 但这是一个完整的命令字符串,而不是*命令*,这是你的命令试图执行的命令。 – pjz

+0

好!我了解你,我会试试你的方式! – karensantana

0

这个工作对我来说,有一个HelloWorld,只是做System.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: nonblocking subprocess, check stdout