我在Windows运行Python 2.5,某处代码我

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

由pid杀IE窗口。问题是,没有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保证(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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top