2010-07-07 4 views
7

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

ответ

14

Возможно, вы запустите программу через 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

+0

Ммм ... ладно. Так что команда выполняется на линии P = Popen (...), да? И он будет показывать только вывод при вызове p.stdout.read() ... да? Спасибо –

+0

Хорошо ... команды выполнялись, но в отдельном потоке. В любом случае я могу либо запустить программу во время выполнения команд, либо сохранить ее в одном потоке? Спасибо. –

+2

Просто используйте p.wait(). Однако, по-видимому, это может привести к взаимоблокировке при использовании PUDE stdout, если программа генерирует достаточный выход. См. Полную документацию по адресу http://docs.python.org/library/subprocess.html#subprocess.Popen.wait. Тем не менее, я думаю, что это должно сработать. –

0

Перенаправление stderr, а также стандартный вывод.

+1

Это не делает работу цитаты из http://docs.python.org/library/os.html#process-management os.system (команды) Выполнение команды (строки) в подоболочке. Это реализуется путем вызова стандартной системы функций C() и имеет те же ограничения. Изменения в sys.stdin и т. Д. Не отражаются в среде выполненной команды. –

12

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

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

Это работает только в системе unix –

+0

Да, правильно. Ответ обновляется, чтобы избежать путаницы. – ealdent

0

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

Возможно, я не понимаю вопроса.