如何在Python脚本中启动独立CMD终端以持续检测Windows进程是否冻结
解决Python脚本启动独立CMD终端重启进程后继续检测的问题
核心问题在于os.system()是同步执行的——它会一直等待你调用的bat脚本执行完毕,才会继续运行Python的后续检测逻辑。要让Python立刻回到检测工作,你需要用异步启动独立终端的方式,这里推荐用Python标准库的subprocess模块来实现。
具体实现方案
直接替换os.system(r'xxx.bat')为以下代码:
import subprocess # 检测到进程冻结时执行这行代码 subprocess.Popen( ['cmd.exe', '/c', 'xxx.bat'], creationflags=subprocess.CREATE_NEW_CONSOLE )
参数解释
cmd.exe /c xxx.bat:让CMD终端执行指定的bat脚本,执行完成后自动关闭窗口(如果希望窗口保持打开方便排查,可以把/c换成/k)。creationflags=subprocess.CREATE_NEW_CONSOLE:这是Windows特有的参数,它会强制新启动的CMD在一个独立的终端窗口中运行,完全脱离Python脚本的控制台,同时Python脚本会立刻跳过这行代码,继续执行后续的进程检测逻辑。
额外提示
- 尽量给bat文件使用绝对路径,比如
r'C:\your\folder\xxx.bat',避免因为Python脚本的工作目录不同导致找不到文件。 - 如果需要确认bat脚本是否成功启动,可以把Popen的返回值存下来:
proc = subprocess.Popen(...),之后可以用proc.poll()查看进程状态,但这不影响Python脚本继续执行检测任务。
内容的提问来源于stack exchange,提问作者Mabignix
相关产品推荐
相关产品推荐

