答案是误入output或debug console面板,而非权限或插件问题;vscode中仅terminal面板支持交互式输入,需通过ctrl+`唤出或重建,且code runner、调试及任务配置须指定运行于终端才能正常使用input()等交互功能。

为什么终端显示“只读”,光标不闪、输不了字?
不是权限问题,也不是插件坏了——你根本没在真正的终端里。VSCode 有三个名字相似但功能完全不同的面板:OUTPUT(纯日志,永远只读)、DEBUG CONSOLE(只能输表达式,不能跑命令)、Terminal(唯一可交互的 shell)。你看到的“只读”,大概率是误点了 OUTPUT 或 DEBUG CONSOLE 标签页。
验证方法:按 Ctrl+`(反引号),看底部是否弹出带 $ 或 C:\> 提示符的新面板;如果没反应,说明终端进程已挂,按 Ctrl+Shift+P → 输入 Terminal: Create New Terminal 强制重建。
Code Runner 运行 Python/C 后无法输入 input()?
Code Runner 默认把程序输出扔进 OUTPUT 面板,而 input() 或 scanf() 的 stdin 流压根没连过去,所以提示文字能看见,键盘敲了也没用。
- 打开设置(
Ctrl+,),搜索code-runner: run in terminal,必须勾选 - 顺手把
code-runner: preserve focus设为false,否则运行完焦点还卡在编辑器,你得手动点进终端 - 重启 VSCode,再点 ▶️ 运行,程序就会在
Terminal面板启动,input()才能正常收字
调试时 F5 启动,input() 卡死不动?
VSCode 调试器默认用的是非交互式控制台(internalConsole),它不转发 stdin,所以 input() 一直在等一个永远不会来的输入流。
必须改 .vscode/launch.json:
{
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"module": "python",
"console": "integratedTerminal", // 关键:强制走终端
"justMyCode": false, // 否则会跳过 input() 底层调用
"env": {"PYTHONIOENCODING": "utf-8"} // 防中文输入卡住
}
]
}
删掉或注释掉 "console": "internalConsole" 这一行,否则一切白配。
tasks.json 任务输出到只读面板,怎么让它进终端?
很多构建任务(比如编译 C、打包前端)默认配置了 "panel": "output",结果命令执行完只在 OUTPUT 里刷日志,没法交互、没法 Ctrl+C 中断。
打开项目根目录下的 .vscode/tasks.json,找到对应 task 的 presentation 块:
- 把
"panel": "output"改成"panel": "shared"(复用已有终端)或"panel": "new"(每次新开 tab) - 加上
"echo": true,这样命令本身也会打印出来,避免黑盒执行 - 别加
"focus": true,否则任务一跑就抢走你正在写的代码焦点
改完保存,再运行任务,输出就落在可操作的 Terminal 里了——能输、能中断、能继续敲下一条命令。
真正容易被忽略的点是:VSCode 不会自动把焦点切给终端,哪怕它已经在那儿了。输之前,务必用鼠标点一下终端内部,或者按 Ctrl+K 手动聚焦,否则键盘输入直接被编辑器吞掉。











