【发布时间】:2014-12-06 22:03:11
【问题描述】:
奇怪的是,当我从生成彩色文本的节点应用程序中保存标准输出时,彩色文本被转换为对象。似乎 ascii 颜色代码被解释为某种数组,然后以对象符号形式写入文件。
这是标准输出发送到终端时的输出。
这是输出到文件后的样子,然后使用 cat 命令查看文件。
有人明白这里发生了什么吗?
编辑:这是CLI script source,因此您可以查看文本是如何生成的。
编辑 2:这是电子模块提供的代码,用于为文本着色:
Object.defineProperty(String.prototype, color,
{ get: function () {
if (noColors || !self.opts.useColors) return this;
return '\033[' + colors[color] + 'm' + this + '\033[0m';
}
, configurable: true
});
编辑 3:我向Electron 提交了一个拉取请求来解决这个问题,它已经从 0.4.1 版开始合并。如果您正在寻找构建 CLI,我推荐它。
【问题讨论】:
-
不是 ascii 颜色代码,而是组成“Loom”横幅的字符。也许你可以展示你是如何产生输出的。
-
@MarkkuK 当然,我会用使用的代码更新问题。
-
可以确定输出到终端式还是文件(块)式输出设备。由于在重定向到文件时会得到 JSON 格式的输出,因此 必须 是有意的。 (即,这不是程序通常的行为方式。)
-
@Jongware 是的,我认为可能是这样。否则没有多大意义。也许节点在发送到文件时会做一些特别的事情。检查 node.js 文档...
-
.. 也就是说:不幸/幸运的是,在我的 Mac 上使用
node,使用 Ionică Bizău 的 couleurs 添加了转义码的简单着色被重定向为其实际转义码。所以它应该在你的版本或库中。
标签: node.js stdout command-line-interface