从外部命令获取ANSI颜色的输出

时间:2012-06-24 14:23:37

标签: ruby ansi-colors

我正在为watchr编写一个运行我的PHP单元测试的小脚本。

当前脚本使用system()运行测试并将其显示为彩色。

我正在尝试添加libnotify功能,但为此我需要解析输出并匹配regexp,以便通知显示为绿色或红色。

system()不返回输出,%x确实返回,但puts p不显示颜色,我需要快速查看哪个测试失败。一种选择是运行测试两次 - 一次用于在终端窗口中显示,第二次用于检查要显示的通知,但我宁愿避免它。

1 个答案:

答案 0 :(得分:1)

puts会显示颜色。问题是,当您使用%x运行时,您的PHP测试运行器很可能会关闭彩色输出,因为它认为它不在终端下运行。

如果你在shell中执行run_php_test | less,也会发生同样的事情。要修复它,您需要在PHP测试运行器上强制显示彩色输出。

编辑

使用pty运行子流程的最简单方法:

require 'pty'
puts PTY.spawn('run_php_test')[0].read
相关问题