Sublime构建输出乱码需设"encoding":"utf-8"和"-u"参数;保存输出需"shell":true配合重定向;Shell脚本需设语法为Shell Script且selector为"source.shell";启用"word_wrap":true改善阅读。

输出被截断或中文乱码怎么办
Sublime 的构建输出面板默认使用系统默认编码,Windows 上常为 cp936,导致 print("你好") 显示为乱码。这不是 Python 问题,而是 Sublime 没告诉底层 exec 进程用什么编码读 stdout。
解决方法是在构建系统中显式指定 "encoding": "utf-8",并加 -u 参数强制 Python 使用无缓冲 UTF-8 输出:
"cmd": ["python", "-u", "$file"]"encoding": "utf-8"- Windows 下若仍乱码,可额外加
"env": {"PYTHONIOENCODING": "utf-8"}
注意:"shell": true 不是必须的,仅当命令含重定向(>、|)时才需要;盲目开启反而可能干扰编码环境变量传递。
想把输出自动保存到文件而不是只看一眼
Sublime 默认只捕获输出并显示在面板里,不落盘。要写入文件,必须借助 shell 重定向,且必须设 "shell": true,否则 > 符号会被当成 argv 字符串传给 Python,完全不起作用。
常见写法示例:
- 覆盖写入:
"cmd": ["python", "-u", "$file", ">", "output.txt"] - 追加写入:
"cmd": ["python", "-u", "$file", ">>", "run.log"] - 分离 stdout/stderr:
"cmd": ["python", "-u", "$file", ">", "out.txt", "2>", "err.txt"]
关键点:所有重定向操作符(>、>>、2>)都必须作为独立数组元素,不能拼进字符串里;路径名不含空格最安全,否则需确保系统 shell 能正确解析引号。
运行 Shell 脚本时输出为空或报错“No build system”
这不是构建系统没配好,而是 Sublime 根本没识别你的文件为 Shell 脚本。它不会看 #!/bin/bash,只认右下角状态栏显示的语法类型(Syntax)。
必须手动设置:
- 打开
.sh文件 → 右下角点击当前语法(如 Plain Text)→ 选 Shell Script - 确认构建系统里
"selector"是"source.shell",不是"shell"或"bash" - 推荐 cmd 写法(抗空格、尊重 shebang):
["bash", "-i", "-c", "exec \"$1\"", "_", "$file"]
如果用了 ["sh", "-c", "$file"],遇到路径含空格就会失败,且无法响应 Ctrl+C 中断。
输出面板换行错乱、长日志难读
默认输出面板不自动换行,超长行会横向滚动,排查错误很吃力。这不是 bug,是默认关闭了 word wrap。
在构建系统 JSON 中加这一行即可修复:
"word_wrap": true
顺带建议加上:
-
"quiet": false(保持构建开始/结束提示) -
"file_regex": "^[ ]*File \"(*?)\", line ([0-9]*)"(让双击错误行跳转到对应位置)
这些字段都不影响执行逻辑,纯属体验优化,但漏掉一个就可能让调试效率掉一档。

















