Python使用subprocess.run调用程序阻塞,需关闭程序才继续执行如何解决?
问题原因
subprocess.run() 是同步阻塞接口,默认会等待被启动的子进程完全退出后,才会继续执行后续的代码,所以你的print语句会卡在记事本关闭之后才运行。
解决方法
替换 subprocess.run() 为非阻塞的 subprocess.Popen() 即可,该接口启动子进程后会立刻返回,不会阻塞主进程的后续执行,修改后的代码如下:
import os import subprocess notepad_path = r'C:\Windows\System32\notepad.exe' if os.path.exists(notepad_path): subprocess.Popen(notepad_path) print('Program executed')
补充说明
- 如果你后续需要管理这个启动的记事本进程,可以用变量接收
Popen()的返回值,后续可以通过返回的对象查询进程状态、手动终止进程等。 - 仅在确实需要等待子进程执行完成、获取返回结果的场景下使用
subprocess.run(),后台启动独立进程的场景优先用subprocess.Popen()。
内容的提问来源于stack exchange,提问作者natitati
相关产品推荐
相关产品推荐

