我在Windows上运行Python 2.5,在我的代码中的某处
subprocess.Popen("taskkill /PID " + str(p.pid))
通过pid杀死IE窗口。问题是如果没有在Popen中设置管道,我仍然会输出到控制台 - 成功:PID 2068的过程已经终止。我在subprocess.py中将它调试为CreateProcess,但不能从那里开始。
任何人都知道如何禁用它?
答案 0 :(得分:12)
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
是在Python 2.4 +中说NUL
的标准,跨平台方式。
请注意,在Py3K中,子进程为您提供了DEVNULL,因此您只需编写:
from subprocess import check_call, DEVNULL, STDOUT
check_call(("taskkill", "/PID", str(p.pid)), stdout=DEVNULL, stderr=STDOUT)
答案 1 :(得分:7)
fh = open("NUL","w")
subprocess.Popen("taskkill /PID " + str(p.pid), stdout = fh, stderr = fh)
fh.close()