首页 > 解决方案 > 由 Python os.system 调用时,备份输出 ANSI 颜色代码不起作用

问题描述

cmd.exe在 Windows10 中执行时, BackuPy 会输出颜色消息。但是,如果我从 Python 调用它,os.system如下所示:

os.system(f'backupy --noprompt {env.workdrive}hlao {env.usbdrive}hlao')

ANSI 颜色代码(例如:)?[94m不会更改文本颜色,而是直接显示代码文字,干扰原始消息如下:

?[94mScanning files on source:
E:\hlao?[0m

如何解决这个问题呢?

ps:BackuPy是Python编写的备份工具。

标签: pythonwindows-terminal

解决方案


如果您不介意放弃颜色信息,您可以使用标志--nocolour来省略代码。

如果您仍然想要彩色消息,可以尝试以下方法。(我现在不在 Windows 上测试这些,但这可能是由于 os.system 使用了 Windows 环境变量 COMSPEC 给出的系统 shell,这可能是没有启用颜色代码的 cmd.exe 实例)

subprocess.run(['backupy', '--noprompt', f'{env.workdrive}hlao', f'{env.usbdrive}hlao']), shell=False)
import backupy
backupy.run({'noprompt': True, 'source': f'{env.workdrive}hlao', 'dest': f'{env.usbdrive}hlao'})

如果可能的话,也可以在另一个具有更好颜色支持的终端中尝试它,例如新的 Windows 终端。


推荐阅读