Сообщить об ошибке.

Перенаправление вывода в модуля subprocess

Получение вывода запущенной программы

В этом разделе представлены специальные значения, которые могут принимать аргументы stdin, stdout или stderr модуля subprocess.

subprocess.DEVNULL:

Специальное значение, которое может использоваться в качестве аргумента stdin, stdout или stderr для subprocess.Popen() и указывает, что будет использоваться специальный файл os.devnull.

>>> import subprocess
>>> result = subprocess.run(['ping', '-c', '3', '-n', 'yandex.ru'], \
                            stdout=subprocess.DEVNULL, encoding='utf-8')
>>> print(result.stdout)
# None

>>> result = subprocess.run(['ping', '-c', '3', '-n', '0.0.0.host'], \
                            stderr=subprocess.DEVNULL, encoding='utf-8')
>>> print(result.stderr)
# None

subprocess.PIPE:

Специальное значение, которое может использоваться как аргумент stdin, stdout или stderr для subprocess.Popen() и указывает, что канал к стандартному потоку должен быть открыт.

Использование значения subprocess.PIPE наиболее полезно с объектом subprocess.Popen.communicate().

>>> import subprocess
>>> result = subprocess.run(['ping', '-c', '3', '-n', 'yandex.ru'], \
                            stdout=subprocess.PIPE, encoding='utf-8')
>>> result.stdout
# PING yandex.ru (5.255.255.50) 56(84) bytes of data.
# 64 bytes from 5.255.255.50: icmp_seq=1 ttl=249 time=14.5 ms
# 64 bytes from 5.255.255.50: icmp_seq=2 ttl=249 time=14.5 ms
# 64 bytes from 5.255.255.50: icmp_seq=3 ttl=249 time=14.6 ms
# 
# --- yandex.ru ping statistics ---
# 3 packets transmitted, 3 received, 0% packet loss, time 2003ms
# rtt min/avg/max/mdev = 14.551/14.578/14.619/0.102 ms

subprocess.STDOUT:

Специальное значение, которое может использоваться в качестве аргумента stderr для subprocess.Popen() и указывает, что стандартная ошибка stderr должна идти в том же дескрипторе, что и стандартный вывод stdout.

>>> import subprocess
>>> result = subprocess.run(['ping', '-c', '3', '-n', 'host.host'], \
                            stderr=subprocess.STDOUT, \
                            stdout=subprocess.PIPE, encoding='utf-8')
>>> result.stdout
# 'ping: host.host: Неизвестное имя или служба\n'