2024-05-12 20:48:32 发布
网友
我在Windows上运行Python 2.5,在代码中的某个地方
subprocess.Popen("taskkill /PID " + str(p.pid))
用pid杀死IE窗口。问题是,如果不在Popen中设置管道,我仍然可以将输出输出到控制台-成功:带有PID 2068的进程已经终止。我在subprocess.py中将其调试为CreateProcess,但无法从那里开始。
有人知道如何禁用它吗?
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的标准、跨平台方式。
os.devnull
NUL
注意,在Py3K中,subprocess为您提供了DEVNULL,因此您只需编写:
from subprocess import check_call, DEVNULL, STDOUT check_call(("taskkill", "/PID", str(p.pid)), stdout=DEVNULL, stderr=STDOUT)
我总是将元组传递给子进程,因为它省去了我对转义的担心。check_call确保(a)子流程在管道关闭之前已完成,并且(b)被调用流程中的故障不会被忽略。最后,
os.devnull
是Python 2.4+中表示NUL
的标准、跨平台方式。注意,在Py3K中,subprocess为您提供了DEVNULL,因此您只需编写:
相关问题 更多 >
编程相关推荐