Отключить вывод консоли из подпроцесса.К 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)