2017-02-16 2 views
1

Я хочу захватить весь вывод в переменные, которые выдает подпроцесс. Вот мой код:Захват всех выходных данных из подпроцесса в python3

#!/usr/bin/env python3 

import subprocess # Subprocess management 
import sys # System-specific parameters and functions 

try: 
    args = ["svn", "info", "/directory/that/does/not/exist"] 
    output = subprocess.check_output(args).decode("utf-8") 
except subprocess.CalledProcessError as e: 
    error = "CalledProcessError: %s" % str(e) 
except: 
    error = "except: %s" % str(sys.exc_info()[1]) 
else: 
    pass 

Этот скрипт печатает это в терминале:

СВН: E155007: '/ каталог/что/это/не/существую' не рабочая копия

Как я могу захватить это в переменную?

ответ

1

check_output захватывает только стандартный вывод, а не поток ошибок (по https://docs.python.org/3.6/library/subprocess.html#subprocess.check_output)

Для того, чтобы захватить STDERR вы должны использовать

>>> subprocess.check_output(
...  "ls non_existent_file; exit 0", 
...  stderr=subprocess.STDOUT, ...) 

Я рекомендую прочитать документацию перед спрашивать здесь, кстати.

+0

Это работает, спасибо. Я проверил руководство и несколько сообщений об этом, но я до сих пор не получил его работать самостоятельно. – mursuhaukka

+0

Работает ли он сейчас? – Sekuraz

+0

Да, да, еще раз спасибо, Секураз. – mursuhaukka

Смежные вопросы