在Python中禁用subprocess.Popen的控制台输出
我在Windows上运行Python 2.5,代码里有一段
subprocess.Popen("taskkill /PID " + str(p.pid))
是用来通过进程ID来关闭IE窗口的。问题是,即使我没有在Popen中设置管道,我还是会在控制台看到输出 - 成功:进程ID为2068的进程已经被终止。我调试到subprocess.py
里的CreateProcess,但不知道接下来该怎么做。
有没有人知道怎么关闭这个输出?
2 个回答
18
from subprocess import check_call, DEVNULL, STDOUT
check_call(
("taskkill", "/PID", str(p.pid)),
stdout=DEVNULL,
stderr=STDOUT,
)
我总是把元组(或列表)传给子进程,这样我就不用担心转义的问题了。check_call 确保了 (a) 子进程在管道关闭 之前 已经完成,(b) 被调用的进程出错时不会被忽略。
如果你还在用 Python 2,subprocess 不提供 DEVNULL。不过,你可以通过打开 os.devnull
来模拟它(这是在 Python 2.4 及以上版本中表示 NUL
的标准跨平台方式):
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()
11
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会继续进行。比如说,如果你在玩游戏,只有当你的分数达到一定的标准,才能解锁下一个关卡。
在代码中,这种条件通常是通过“如果”语句来实现的。你可以把“如果”想象成一个门,只有当条件满足时,门才会打开,程序才会继续执行后面的代码。
此外,程序还可以根据不同的情况做出不同的反应。这就像在生活中,你会根据天气的变化选择穿什么衣服。如果外面下雨,你可能会选择穿雨衣;如果天气晴朗,你可能就穿得轻松一点。
总之,编程中的条件判断就像是在生活中做决定一样,帮助程序根据不同的情况做出相应的反应。
希望这个解释能帮助你更好地理解编程中的条件判断!
fh = open("NUL","w")
subprocess.Popen("taskkill /PID " + str(p.pid), stdout = fh, stderr = fh)
fh.close()