Вопрос

Я запускаю Python 2.5 в Windows, и где-то в коде у меня есть

subprocess.Popen("taskkill /PID " + str(p.pid))

убить окно IE по pid.Проблема в том, что без настройки конвейера в Popen я все равно получаю вывод на консоль — УСПЕХ:Процесс с PID 2068 завершен.Я отладил его до CreateProcess в subprocess.py, но дальше не могу.

Кто-нибудь знает, как это отключить?

Это было полезно?

Решение

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 гарантирует, что (а) подпроцесс завершился до канал закрывается, и (б) сбой в вызываемом процессе не игнорируется.Окончательно, 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top