До Python-3.5 эти три функции включали высокоуровневый API для модуля subprocess. Теперь вместо них можно использовать функцию subprocess.run(), но многие существующие коды все еще вызывают устаревшие функции, которые перечислены ниже.
subprocess.call(),subprocess.check_call(),subprocess.check_output().subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None):Функция subprocess.call() запускает команду, описанную аргументами args, дожидается завершения команды, а затем возвращает кода завершения программы returncode.
Вместо функции subprocess.call() теперь необходимо использовать универсальную функцию subprocess.run() следующим образом:
proc = subprocess.run(...) proc.returncode
Чтобы подавить вывод stdout или stderr, укажите значение соответствующих аргументов равным subprocess.DEVNULL, например stdout=subprocess.DEVNULL.
Функция subprocess.call() передает все свои аргументы напрямую в интерфейс subprocess.Popen(), кроме времени ожидания timeout.
Примечание.
stdout=subprocess.PIPE или stderr=subprocess.PIPE с этой функцией. Дочерний процесс блокируется, если он генерирует достаточно данных для канала, тем самым заполняя буфер канала ОС.subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None):Функция subprocess.check_call() запускает команду с аргументами, дожидается завершения команды и возвращает 0 если код завершения программы был равен нулю, в противном случае вызывает исключение CalledProcessError. Объект CalledProcessError будет иметь код завершения в атрибуте returncode.
Вместо функции subprocess.check_call() теперь необходимо использовать subprocess.run() следующим образом:
proc = subprocess.run(..., check=True)
Чтобы подавить вывод stdout или stderr, укажите значение соответствующих аргументов равным subprocess.DEVNULL, например stdout=subprocess.DEVNULL.
Функция subprocess.check_call() передает все свои аргументы напрямую в интерфейс subprocess.Popen(), кроме времени ожидания timeout.
Примечание.
stdout=subprocess.PIPE или stderr=subprocess.PIPE с этой функцией. Дочерний процесс блокируется, если он генерирует достаточно данных для канала, тем самым заполняя буфер канала ОС.subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, cwd=None, encoding=None, errors=None, universal_newlines=None, timeout=None, text=None):Функция subprocess.check_output() запускает команду с аргументами и возвращает ее вывод.
Если код возврата был ненулевым, то функция вызывала исключение CalledProcessError. Объект CalledProcessError будет иметь код завершения в атрибуте returncode и любые выходные данные в атрибуте output.
Теперь функция subprocess.check_output() эквивалентна следующему коду:
proc = subprocess.run(..., check=True, stdout=PIPE) proc.stdout
Полная сигнатура функции subprocess.check_output() в значительной степени совпадает с сигнатурой subprocess.run() - большинство аргументов передаются напрямую в этот интерфейс. Однако явная передача input=None для наследования стандартного дескриптора входного файла родителя не поддерживается.
По умолчанию эта функция возвращает данные в виде закодированных байтов. Фактическое кодирование выходных данных может зависеть от вызываемой команды, поэтому часто требуется декодирование в текста на уровне приложения.
Это поведение может быть переопределено путем определения аргументов encoding и errors или text=True (также известный как universal_newlines) как описано в разделе "Часто используемые аргументы." и в описании функции subprocess.run().
Чтобы перенаправить ошибки выполнения команды в stdout, используйте аргумент stderr=subprocess.STDOUT:
>>> import subprocess >>> proc = subprocess.run('ls non_existent_file; exit 0', stdout=subprocess.PIPE, \ stderr=subprocess.STDOUT, shell=True, encoding='utf-8') >>> proc.stdout # 'ls: non_existent_file: Нет такого файла или каталога\n'