2011-05-23 57 views
1

捕獲標準輸出,我有以下腳本:未能從應用

import subprocess 

arguments = ["d:\\simulator","2332.txt","2332.log", "-c"] 

output=subprocess.Popen(arguments, stdout=subprocess.PIPE).communicate()[0] 
print(output) 

這給了我B「」作爲輸出。

我也試過這個腳本:

import subprocess 

arguments = ["d:\\simulator","2332.txt","atp2332.log", "-c"] 
process = subprocess.Popen(arguments,stdout=subprocess.PIPE) 
process.wait() 

print(process.stdout.read()) 
print("ERROR:" + str(process.stderr)) 

這使我的輸出:B「」,錯誤:無

然而,當我運行這個在命令提示符我得到一個5行文字。

d:\simulator atp2332.txt atp2332.log -c

我在模擬器中添加了一個消息框,它在啓動時彈出。這是針對所有三種情況。所以我知道我成功地啓動了模擬器。然而,python腳本並不擔心stdout。

我在做什麼錯?

巴里。

+0

爲什麼你'process.stdout.read()'在同一行和'STR(process.stderr)'就下,在你的第二個代碼示例?你不應該在兩種情況下都使用'read()'嗎? – 2011-05-23 08:29:56

+0

是的,你的權利。當我嘗試:

process = subprocess.Popen(arguments,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
我也得到一個stderr的空字符串。 – Baz 2011-05-23 08:31:37

回答

2

如果可能(不是層出不窮的數據流),您應該使用頁面上註明的communicate()

試試這個:

import subprocess 

arguments = ["d:\\simulator","2332.txt","atp2332.log", "-c"] 
process = subprocess.Popen(arguments, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
sout, serr = process.communicate() 

print(sout) 
print(serr) 
1

下面的代碼使我對標準輸出的文本輸出。 也許你可以試試,然後替換你的命令的幫助

import subprocess 

arguments = ["help","2332.txt","atp2332.log", "-c"] 
process = subprocess.Popen(arguments,stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
process.wait() 

print 'Return code', process.returncode 
print('stdout:', process.stdout.read()) 
print("stderr:" + process.stderr.read())