2012-06-24 33 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