2012-06-24 32 views
0

我正在爲運行我的PHP單元測試的watchr編寫一個小腳本。從外部命令獲取ANSI顏色的輸出

當前腳本使用system()運行測試,並將它們顯示爲彩色。

我試圖添加libnotify功能,但爲此我需要解析輸出並與regexp匹配,以便通知將顯示綠色或紅色。

system()不返回輸出,%x確實返回,但puts p不顯示顏色,我需要快速查看哪些測試失敗。一種選擇是運行兩次測試 - 一次用於在終端窗口中顯示,第二次用於檢查要顯示的通知,但我寧願避免它。

回答

1

puts確實顯示顏色。問題是,當您運行%x時,您的PHP測試運行器很可能會關閉彩色輸出,因爲它認爲它不在終端下運行。

如果在shell中執行run_php_test | less,則會發生同樣的情況。爲了解決這個問題,你需要在PHP測試運行器上強制輸出顏色。

編輯

運行與pty子流程最簡單的方法:

require 'pty' 
puts PTY.spawn('run_php_test')[0].read 
+0

有沒有辦法來欺騙外部命令,以爲它是下一個支持色彩終端上運行?我檢查了測試跑步者的選擇 - 沒有辦法強制彩色輸出。 –

+0

如果有一種方法讓它在着色時運行,應該有一種方法可以打開它,對吧?因此,在測試運行代碼的某處,它開啓或關閉着色。也許有沒有直接的命令行開關,但有代碼在那裏的地方。也許你可以猴子補丁。但是,如果這不是一個選項,你可以嘗試Ruby中的'pty'庫。它在虛擬終端中運行進程。請參閱方法#7:http://devver.wordpress.com/2009/10/12/ruby-subprocesses-part_3/ – Casper

+0

@GermanRumm - 查看我的編輯。 – Casper