Отключить вывод консоли из подпроцесса.К popen в Python
Я запускаю Python 2.5 в Windows, и где-то в коде у меня есть
subprocess.Popen("taskkill /PID " + str(p.pid))
чтобы убить окно IE по pid. Проблема в том, что без настройки трубопроводов в Popen я все еще получаю вывод на консоль - успех: процесс с PID 2068 был завершен. Я отладил его для CreateProcess в subprocess.py но оттуда не уйдешь.
кто-нибудь знает как отключить это?
2 ответов
fh = open("NUL","w")
subprocess.Popen("taskkill /PID " + str(p.pid), stdout = fh, stderr = fh)
fh.close()
import os
from subprocess import check_call, STDOUT
DEVNULL = open(os.devnull, 'wb')
try:
check_call(("taskkill", "/PID", str(p.pid)), stdout=DEVNULL, stderr=STDOUT)
finally:
DEVNULL.close()
Я всегда передаю кортежи в подпроцесс, поскольку это избавляет меня от беспокойства о побеге. check_call гарантирует, что (a) подпроцесс завершен до канал закрывается, и (b) сбой в вызываемом процессе не игнорируется. Наконец,os.devnull
это стандартный, кросс-платформенный способ сказать NUL
в Python 2.4+.
обратите внимание, что в Py3K подпроцесс предоставляет DEVNULL для вас, поэтому вы можете просто написать:
from subprocess import check_call, DEVNULL, STDOUT
check_call(("taskkill", "/PID", str(p.pid)), stdout=DEVNULL, stderr=STDOUT)