2015-11-06 5 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

вызова ** 'check_output' ** с **' STDERR = subprocess.STDOUT' **. См. Мой ответ –

ответ

4

Как указано в: https://docs.python.org/2/library/subprocess.html#subprocess.check_output

Чтобы также захватить стандартную ошибку в результате использования STDERR = subprocess.STDOUT

Try:

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'. –