2012-11-29 50 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