2015-11-06 55 views
3

我試圖獲取traceroute失敗時返回的錯誤消息。例如:當traceroute使用子進程時沒有錯誤輸出

from subprocess import CalledProcessError, check_output 

try: 
    output = check_output(["traceroute", "error"]) 
except CalledProcessError as error: 
    output = error.output 

print "error: {}".format(output) 

輸出:

error: 

我一直在使用output = str(error.output)嘗試,但輸出保持爲空。在執行上述代碼時,會向終端輸出錯誤消息,因此應該可以將其分配給變量,對不對?

+0

用**'stderr = subprocess.STDOUT' **調用** check_output **。看到我的回答 –

回答

4

如說:https://docs.python.org/2/library/subprocess.html#subprocess.check_output

要還捕獲標準錯誤的結果,使用 標準錯誤= subprocess.STDOUT

嘗試:

import subprocess 
from subprocess import CalledProcessError, check_output 

try: 
    output = check_output(["traceroute", "error"], stderr=subprocess.STDOUT) 
except CalledProcessError as error: 
    output = error 

print "error: {}".format(output.output) 

輸出:

error: traceroute: unknown host error 
+0

這是令人難以置信的尷尬,但工程。令人驚訝的是,'CalledProcessError'不會顯示屬性'error'。 –

相關問題