1

我正在使用帮助脚本来执行rspec测试。

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

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

如何执行一个过程,以便它返回包含文本颜色的输出?

4

3 回答 3

2

Kernel.exec()得到我想要的解决方案(彩色 rspec 输出),但它是通过用rspec 进程替换我的 ruby​​ 脚本进程来实现的。output这意味着在 rspec 调用之后我不能对或运行任何东西。

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

于 2014-09-25T18:01:37.843 回答
1

事实证明,可以通过PTY 模块在伪终端中运行命令,以保留面向用户的类似终端的行为。致谢tty-command gem 的创建者(见这个问题)在他的 gem 中实现了这个行为:

require 'tty-command'
cmd = TTY::Command.new(pty: true)
cmd.run('rake', 'rspec')

请记住,使用伪终端可能会产生不必要的副作用,例如使用寻呼机git的某些命令实际上会导致命令挂起。因此,引入该功能可能是一个重大变化。

于 2017-11-26T18:53:02.300 回答
0

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

在 RSpec 的情况下,您可以rspec --tty通过 rake by 或通过 rake by强制着色rake spec SPEC_OPTS=' --tty'

另请参阅Ruby popen3 和 ANSI 颜色

但是,此解决方案仍然特定于 Rspec。我很想听听一般的。

于 2017-08-18T14:57:27.620 回答