2014-09-25 60 views
1

我正在使用助手腳本來執行rspec測試。如何在Ruby中執行流程時保留輸出顏色?

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

這工作正常,除了我輸了rake rspec輸出的所有顏色。相應的ANSI代碼似乎不包含在output字符串中。

我該如何執行一個進程以便返回包含文本顏色的輸出?

+0

[Ruby popen3和ANSI color]可能重複(https://stackoverflow.com/questions/5526842/ruby-popen3-and-ansi-colour) – thisismydesign 2017-11-26 18:56:26

回答

1

Kernel.exec()讓我我想要的解決方案(彩色輸出的RSpec),但它通過與RSpec的過程中更換我Ruby腳本程序這樣做。這意味着我不能對output做任何事情,或者在rspec調用之後運行任何東西。

這在我的特殊情況下是可以接受的,但作爲一般解決方案並不理想。所以如果可以的話,我想要一個更好的答案。

0

如果RSpec未寫入tty(即控制檯),它將禁用顏色。

在RSpec的情況下,您可以強制着色rspec --tty或通過耙撥rake spec SPEC_OPTS=' --tty'

參見Ruby popen3 and ANSI colour

但是這個解決方案仍然是具體到Rspec的。我有興趣聽到一個一般的。

0

原來,可以通過PTY module在僞終端中運行命令,以保護用戶面對類似終端的行爲。學分轉到tty-command寶石(see this issue)誰實施這種行爲在他的寶石的創造者:

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

請記住,使用僞終端可能產生有害的副作用,如某些git命令using a pager這將從根本上導致命令掛起。因此,引入功能可能是一個突破性改變。

相關問題