在Ruby中执行进程时如何保留输出颜色?

时间:2014-09-25 17:57:02

标签: ruby process colors exec ansi-escape

我使用帮助程序脚本执行rspec测试。

command = "rake spec #{path} #{scope}"
output = `#{command}`
puts output

这很好,除了我丢失了rake rspec输出中的所有颜色。相应的ANSI代码似乎不包含在output字符串中。

如何执行流程以便返回包含文本颜色的输出?

2 个答案:

答案 0 :(得分:1)

Kernel.exec()为我提供了我想要的解决方案(彩色rspec输出),但它通过使用rspec进程替换我的ruby脚本进程来实现。这意味着我无法对output执行任何操作或在rspec调用后运行任何内容。

在我的特殊情况下,这是可以接受的,但作为一般解决方案并不理想。如果有的话,我想要一个更好的答案。

答案 1 :(得分:0)

如果RSpec没有写入tty(即控制台),RSpec将禁用颜色。

如果是RSpec,您可以rspec --tty强制着色,或rake spec SPEC_OPTS=' --tty'强制着色。

另见Ruby popen3 and ANSI colour

然而,此解决方案仍然特定于Rspec。我有兴趣听一般的。