Python使用subprocess.Popen打开记事本在VS Code中运行即关闭问题
问题成因
- VS Code内置终端在Python脚本执行完毕后,会默认销毁整个脚本关联的进程树,你用
sp.Popen启动的记事本属于脚本的子进程,会跟着脚本一起被终端终止。 - IDLE运行脚本时不会主动清理派生的子进程,所以记事本可以正常保留。
解决办法
方法1:让主脚本等待记事本关闭后再退出
在代码末尾加wait()方法,阻塞主脚本直到记事本被手动关闭,修改后代码如下:
import subprocess as sp programme = "Notepad.exe" fileName = "nerd.txt" notepad_proc = sp.Popen([programme, fileName]) # 等待子进程运行结束 notepad_proc.wait()
方法2:让记事本脱离主进程独立运行(Windows平台适用)
不需要主脚本等待的话,可以给Popen添加进程创建参数,让子进程脱离主进程的进程树,不会跟着主脚本销毁:
import subprocess as sp programme = "Notepad.exe" fileName = "nerd.txt" sp.Popen([programme, fileName], creationflags=sp.CREATE_NEW_CONSOLE | sp.DETACHED_PROCESS)
方法3:修改VS Code运行逻辑
不想改代码的话可以调整运行方式:运行脚本时不要用VS Code内置终端,选择用外部终端启动即可,也可以在VS Code的Python扩展设置里关闭终端自动清理子进程的相关配置。
内容的提问来源于stack exchange,提问作者ma55iven3rd
相关产品推荐
相关产品推荐

