2013-08-23 39 views
1

兩個輸出和錯誤我只想做這樣的事情:我想從子

>>bar, err_value = subprocess.check_output("cat foo.txt", shell=True) 
>>print bar 
>>Hello, world. 
>>print err_value 
>>0 

但我不能似乎能夠做到這一點。我可以得到標準輸出,錯誤代碼(通過.call),或者兩者都需要使用某種管道。我在這裏錯過了什麼?關於這個(對我來說)明顯的功能,文檔非常稀少。對不起,如果這是一個簡單的問題。

回答

3

我認爲你想要stdout,sterr和返回碼?在這種情況下,你可以這樣做:

import subprocess 
PIPE = subprocess.PIPE 
proc = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE) 
output, err = proc.communicate() 
errcode = proc.returncode 
+0

你說得對。我想要錯誤代碼,而不是stderr。 – Jiminion

1

subprocess.check_output reutrn值(輸出字符串),並且不返回退出狀態。使用下面的表格:

import subprocess 
try: 
    out = subprocess.check_output('cat foo.txt', shell=True) 
    print out 
except subprocess.CalledProcessError, e: 
    print e 
+0

這也是一個好方法。感謝您的回答。 – Jiminion

1

我最終與此一起去。謝謝你的幫助!

def subprocess_output_and_error_code(cmd, shell=True): 
    import subprocess 
    PIPE=subprocess.PIPE 
    STDOUT=subprocess.STDOUT 
    proc = subprocess.Popen(cmd, stdout=PIPE, stderr=STDOUT, shell=shell) 
    stdout, stderr = proc.communicate() 
    err_code = proc.returncode 
    return stdout, int(err_code)