10

私はWindows上でPython2.5を実行しており、コードのどこかにあります

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

pidでIEウィンドウを強制終了します。問題は、Popenで配管を設定しなくても、コンソールに出力が返されることです-成功:PID2068のプロセスが終了しました。subprocess.pyのCreateProcessにデバッグしましたが、そこから移動できません。

誰もがこれを無効にする方法を知っていますか?

4

2 に答える 2

16
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)
于 2009-08-07T19:58:22.100 に答える
9
fh = open("NUL","w")
subprocess.Popen("taskkill /PID " + str(p.pid), stdout = fh, stderr = fh)
fh.close()
于 2009-08-07T13:41:08.827 に答える