我正在使用子进程模块启动子进程(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上执行非阻塞读取。 我怎么能做这两件事?
答案 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!");
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