Есть ли тихая версия subprocess.call?

Есть ли вариант subprocess.call который может запускать команду без печати до стандартного выхода или способ блокировать стандартные сообщения?

5 Solutions collect form web for “Есть ли тихая версия subprocess.call?”

Да. Перенаправить его stdout в /dev/null .

 process = subprocess.call(["my", "command"], stdout=open(os.devnull, 'wb')) 

Заметьте, часто такая болтовня на stderr, поэтому вы можете захотеть тоже замолчать. Вот мой пример:

 import os from subprocess import check_call with open(os.devnull, 'w') as shutup: return_code = check_call(args, stdout=shutup, stderr=shutup) 

subprocess.call также принимает перенаправление stdin / stdout / stderr:

 process = subprocess.call(["my", "command"], stdout=open(os.devnull, 'wb')) 

Это рецепт, который я использую много: вызывать subprocess и собирать выходные данные, а когда команде удается отменить вывод, но когда он терпит неудачу, напечатайте результат.

 import subprocess as sp import sys if "print" in __builtins__.__dict__: prn = __builtins__.__dict__["print"] else: def prn(*args, **kwargs): """ prn(value, ..., sep=' ', end='\\n', file=sys.stdout) Works just like the print function in Python 3.x but can be used in 2.x. Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. """ sep = kwargs.get("sep", ' ') end = kwargs.get("end", '\n') file = kwargs.get("file", sys.stdout) s = sep.join(str(x) for x in args) + end file.write(s) def rc_run_cmd_basic(lst_cmd, verbose=False, silent=False): if silent and verbose: raise ValueError("cannot specify both verbose and silent as true") p = sp.Popen(lst_cmd, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) tup_output = p.communicate() s_cmd = ' '.join(lst_cmd) if verbose: prn() prn("command: '%s'\n" % s_cmd) if 0 != p.returncode: prn() prn("Command failed with code %d:" % p.returncode) else: prn("Command succeeded! code %d" % p.returncode) if verbose: prn("Output for: " + s_cmd) prn(tup_output[0]) prn() if not silent and 0 != p.returncode: prn("Error output for: " + s_cmd) prn(tup_output[1]) prn() return p.returncode 

Я использую subprocess.check_output в таких случаях и отбрасываю возвращаемое значение. Возможно, вы захотите добавить комментарий к своему коду, указав, почему вы используете check_output вместо check_call. check_output также приятнее, когда происходит сбой, и вы заинтересованы в выводе ошибки. Пример кода ниже. Выход отображается только в том случае, если вы раскомментируете линию печати. Если команда не выполняется, генерируется исключение.

 import subprocess ret = subprocess.check_output(["cat", "/tmp/1"]) #print ret 
  • Передача списка через Python на C ++
  • Подпроцесс Python.Popen как другой пользователь в Windows
  • подпроцесс python с тайм-аутом и большим выходом (> 64K)
  • python сохранение выходных данных из а для итерации и подпроцесса для контрольной суммы
  • запуск нескольких команд bash с подпроцессом
  • Subprocess.Popen: клонирование stdout и stderr как для терминала, так и для переменных
  • Изменение каталога подпроцесса
  • FileNotFoundError: Das System kann die angegebene Datei nicht finden
  • Когда использовать Shell = True для модуля подпроцесса Python
  • используя подпроцесс Python для перенаправления stdout на stdin?
  • Запретить подпроцесс подпроцесса писать на stdout
  • Python - лучший язык программирования в мире.