我正在使用帮助脚本来执行rspec
测试。
command = "rake spec #{path} #{scope}"
output = `#{command}`
puts output
这很好用,除了我丢失了rake rspec
输出中的所有颜色。适当的 ANSI 代码似乎不包含在output
字符串中。
如何执行一个过程,以便它返回包含文本颜色的输出?
我正在使用帮助脚本来执行rspec
测试。
command = "rake spec #{path} #{scope}"
output = `#{command}`
puts output
这很好用,除了我丢失了rake rspec
输出中的所有颜色。适当的 ANSI 代码似乎不包含在output
字符串中。
如何执行一个过程,以便它返回包含文本颜色的输出?
Kernel.exec()
得到我想要的解决方案(彩色 rspec 输出),但它是通过用rspec 进程替换我的 ruby 脚本进程来实现的。output
这意味着在 rspec 调用之后我不能对或运行任何东西。
这在我的特定情况下是可以接受的,但作为一般解决方案并不理想。所以如果可以的话,我想要一个更好的答案。
事实证明,可以通过PTY 模块在伪终端中运行命令,以保留面向用户的类似终端的行为。致谢tty-command gem 的创建者(见这个问题)在他的 gem 中实现了这个行为:
require 'tty-command'
cmd = TTY::Command.new(pty: true)
cmd.run('rake', 'rspec')
请记住,使用伪终端可能会产生不必要的副作用,例如使用寻呼机git
的某些命令实际上会导致命令挂起。因此,引入该功能可能是一个重大变化。
如果没有写入 tty(即控制台),RSpec 将禁用颜色。
在 RSpec 的情况下,您可以rspec --tty
通过 rake by 或通过 rake by强制着色rake spec SPEC_OPTS=' --tty'
。
但是,此解决方案仍然特定于 Rspec。我很想听听一般的。