使用subprocess.call调用Notepad++后Python后续代码阻塞不执行如何解决
问题原因
subprocess.call() 本身的设计就是同步阻塞等待被调用的子进程运行结束后才会返回,因此你启动Notepad++后,只要不手动关闭程序,Python主线程就会一直卡在该步骤等待返回值,这是函数的正常特性,并非运行报错。
解决方案
将subprocess.call()替换为异步启动子进程的subprocess.Popen()即可,该方法启动子进程完成后会立刻返回,不会等待子进程关闭,Python可直接执行后续代码。
代码示例
import subprocess subprocess.Popen([r"C:\Program Files\Notepad++\notepad++.exe", r"C:\location\myfile.txt"])
补充可选方案
如果你本地.txt格式文件的默认打开程序已经设置为Notepad++,可以直接使用Windows系统原生的文件启动方法,不需要硬编码Notepad++的安装路径:
import os os.startfile(r"C:\location\myfile.txt")
额外说明
如果后续需要管理启动的Notepad++进程,可以将Popen的返回值保存为变量,实现状态查询、主动关闭等操作:
- 查看进程是否仍在运行:
process.poll(),返回None代表运行中,返回数值代表已退出 - 主动关闭进程:
process.terminate()
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

