我正在编写代码,但它没有按预期工作。代码的简化版本如下:
from subprocess import call
import time
call([r"C:\Windows\System32\notepad.exe"])
time.sleep(5)
call(["taskkill", "/im", "notepad.exe"])
在运行上面的脚本时,代码不会从第一行开始运行call
,即脚本打开记事本并等待来自 的响应call([r"C:\Windows\System32\notepad.exe"])
,但这仅在我手动关闭记事本时发生。
我希望脚本打开记事本,等待 5 秒钟然后关闭它,无需手动用户干预。那么我该怎么做呢?
你可以做的是使用
Popen
而不是call
:subprocess.call函数等待命令完成,这就是为什么当您关闭
notepad.exe
.subprocess.Popen函数在一个新的(子)进程中执行。
之后
sleep
,您可以使用该函数Popen.kill
终止进程:如果你想使用
Popen
(发送数据到stdin
、读取stdout
或stderr
)与线程交互,你可以使用函数Popen.communicate
:但注意它
Popen.communicate
等待线程完成,所以没有必要使用Popen.kill