根本原因是vs code默认以非交互模式运行python脚本,进程结束即关闭终端;解决方法包括末尾加input()、用ctrl+f5运行、配置tasks.json或code runner插件,并注意系统差异与调试模式更可靠。

终端运行 Python 脚本后窗口直接关闭
根本原因是 VS Code 默认用的是集成终端的「非交互式」执行模式:脚本跑完进程退出,终端就没了。不是 bug,是设计如此 —— 它把你当成在写命令行工具,不是调试小程序。
常见错误现象:print("hello") 执行完根本看不见输出;或者报错一闪而过,连 Traceback 都没看清就消失了。
- 最简单解法:在脚本末尾加
input()(Python 3)或raw_input()(Python 2),让程序卡住等你按回车 - 更干净的做法:用 VS Code 的「运行而不调试」快捷键
Ctrl+F5(Windows/Linux)或Cmd+F5(macOS),它会自动在终端里加--wait类似逻辑,保持窗口打开 - 别用右键「Run Python File in Terminal」——这个命令本质是
python xxx.py,不带任何停留机制
tasks.json 配置没生效,还是闪退
很多人改了 .vscode/tasks.json 却发现没用,是因为 VS Code 默认不走 tasks 运行单个 Python 文件,除非你显式调用「运行任务」。
使用场景:你想统一加 python -i(进入交互模式)、或加 pause(Windows)、read(macOS/Linux)来停住终端。
- 确保
tasks.json放在工作区根目录下的.vscode/文件夹里 -
"isBackground": false必须设为false,否则终端不会等待结束 - Windows 下推荐用
cmd /c python "${file}" & pause;macOS/Linux 用bash -c 'python "${file}"; read -p "Press enter to continue..."' - 注意
${file}是 VS Code 变量,不是 shell 变量,不能写成$file
用 Code Runner 插件结果还是一闪而过
Code Runner 默认配置就是「执行完关终端」,尤其对 Python 这种解释型语言很不友好。
参数差异:它的行为由 code-runner.runInTerminal 和 code-runner.preserveFocus 共同控制,但关键其实是 code-runner.terminalPath 和是否启用「保持终端打开」开关。
- 打开设置,搜
code-runner: preserve focus→ 勾选 - 再搜
code-runner: run in terminal→ 确保为true - 进插件设置页面,找到
Code-runner: Executor Map,把 Python 对应那行改成:"python": "python -u $fileName && read -n 1 -s -p 'Press any key to continue...'"(macOS/Linux);Windows 用户用pause替换最后部分 - 改完要重启 VS Code,热重载不生效
为什么 launch.json 的 debug 模式不闪退,但 run 就闪?
因为 launch.json 是调试协议控制的,VS Code 主动托管生命周期;而普通 run 是 shell 进程直跑,跑完就交还控制权给终端,终端自己决定关不关。
性能影响几乎为零,但兼容性要注意:某些公司禁用了终端交互(比如用远程 SSH 连 Windows Server),input() 会卡死,此时只能靠 launch.json + F5 启动调试器来观察输出。
- 调试模式下,即使没断点,也能看到完整
stdout和stderr,且终端不会关闭 - 如果只是想看输出,其实
F5比Ctrl+F5更可靠,尤其涉及异常时 - 别在
launch.json里瞎加"console": "integratedTerminal"以外的选项,容易触发奇怪的子进程隔离问题
真正麻烦的是混合环境:比如你在 WSL 里用 VS Code 远程开发,又开了 Windows 终端,pause 和 read 就得按实际宿主系统选,而且 VS Code 的终端类型(integratedTerminal / externalTerminal / integratedPowerShell)会悄悄改变行为边界。










