Перенаправление stdio из команды в ОС.system() в Python


Обычно я могу изменить stdout в Python, изменив значение sys.stdout. Однако это, по-видимому, влияет только на утверждения print. Итак, есть ли способ подавить вывод (на консоль) программы, которая выполняется с помощью команды os.system() в Python?

4 7

4 ответа:

Вы можете рассмотреть возможность запуска программы через subprocess.Popen, с subprocess.PIPE связью, а затем засунуть этот вывод куда угодно, но как есть, os.system просто выполняет команду, и ничего больше.

from subprocess import Popen, PIPE

p = Popen(['command', 'and', 'args'], stdout=PIPE, stderr=PIPE, stdin=PIPE)

output = p.stdout.read()
p.stdin.write(input)

Гораздо более гибкий, на мой взгляд. Вы можете посмотреть полную документацию: Python Subprocess module

В системе unix вы можете перенаправить stderr и stdout в /dev / null как часть самой команды.

os.system(cmd + "> /dev/null 2>&1")

Перенаправление stderr, а также stdout.

Если вы хотите полностью исключить консоль, которая запускается с программой python, вы можете сохранить ее с помощью .расширение pyw.

Хотя, возможно, я неправильно понял вопрос.