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)