Python subprocess.run启动外部程序后如何继续执行下一行代码
问题根因
subprocess.run 是同步调用接口,设计上会阻塞当前主进程,等待子进程完全终止后才会返回执行结果,因此启动记事本后,主进程会停在调用行,直到记事本被关闭才会继续执行后续print逻辑。
修复方案
使用subprocess.Popen替代subprocess.run即可。Popen会异步启动子进程,启动完成后立刻返回进程对象,不会等待子进程退出,主进程后续代码会立即执行。
可直接运行的修正代码:
import subprocess if __name__ == '__main__': subprocess.Popen("C:/Windows/System32/notepad.exe") print("hiiiiii")
优化建议
- 传参时优先使用列表格式传入命令和参数,避免路径包含空格、特殊字符时出现解析异常,更稳妥的写法:
subprocess.Popen(["C:/Windows/System32/notepad.exe"]) - 若后续需要获取子进程的退出码、输出内容,可以保存
Popen返回的进程实例,在需要的节点调用wait()或communicate()方法即可,不会影响启动阶段的非阻塞效果。
内容的提问来源于stack exchange,提问作者Yenike Raghu Ram
相关产品推荐
相关产品推荐

