python - 由 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编写的备份工具。
解决方案
如果您不介意放弃颜色信息,您可以使用标志--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 终端。
推荐阅读
- python - 从具有坐标和值的字典构建 numpy 矩阵
- regex - 正则表达式隐式 AND 不起作用,但显式 OR 起作用
- jquery - JQuery 用 id 替换类
- javascript - 如何避免在 react native webview 中弹出。?
- visual-studio-code - 为什么`cargo build`不能在VS Code中编译structopt-derive?
- javascript - wpbackery 视觉作曲家 5.4.7 前端编辑器不工作仅显示徽标
- c# - 具有动态子菜单的水平菜单的 SplitView 替代方案
- python - 如何在张量流中实现 Theano.tensor.Lop?
- docker - 从文件构建 Dockerfile 时 docker-compose.yml 设置参数
- c - 寻找 Array-C 程序的支点