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)呼び出されたプロセスの失敗が無視されないことを確認します。最後に、Python2.4以降os.devnull
での標準的なクロスプラットフォームの言い方です。NUL
Py3Kでは、サブプロセスがDEVNULLを提供するため、次のように記述できます。
from subprocess import check_call, DEVNULL, STDOUT
check_call(("taskkill", "/PID", str(p.pid)), stdout=DEVNULL, stderr=STDOUT)