SuperAPI AI 工具集

python-cross-platform-smoothing

编程与开发

查看项目

更新于 10-15 22:40

技能介绍

用途:帮助编写在 Windows、Linux、macOS 上行为一致的 Python 脚本,覆盖 CLI、TUI 与 GUI 场景,重点解决 Windows 下 Rich、Typer 等库的 Unicode 输出问题。

主要能力:Windows 默认将 stdout/stderr 设为旧代码页(cp1252、cp437),无法表示 Rich 和 Typer 使用的制表符、spinner、emoji 等 Unicode 字符,运行时会抛 UnicodeEncodeError。该技能给出在导入 Rich 或 Typer 之前重配置流的模式:对 sys.stdout 和 sys.stderr 判断是否为 TextIOWrapper,若是则调用 reconfigure(encoding="utf-8", errors="replace")。errors="replace" 会把无法编码的字符替换为 ?,避免 CLI 工具崩溃。

使用方式:将重配置代码块放在标准库导入之后、任何第三方导入之前,因为 Rich 会在导入时检查 stdout 编码。isinstance 判断可在 stdout 非 TextIOWrapper(如测试中重定向到 BytesIO)时跳过,可无条件包含。针对旧版 Windows 控制台(无 Windows Terminal 的 cmd.exe),可向 Console 传入 legacy_windows=False 以强制使用 ANSI 转义序列。

适用场景:跨平台命令行工具、终端界面程序,以及任何在 Windows 上输出 Unicode 的脚本。

限制与说明:不建议依赖 PYTHONUTF8=1 或 PYTHONIOENCODING=utf-8 环境变量,因为它们需调用方在进程启动前设置,不如脚本内 reconfigure 自包含。该模式同样适用于 pathlib.Path.write_text()、open() 等继承默认编码的文件 I/O,在 Windows 上应显式传入 encoding="utf-8"。资料未提供更多平台或版本细节。