【问题标题】:Get ANSI-colored output from external command从外部命令获取 ANSI 彩色输出
【发布时间】:2012-06-26 01:16:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby ansi-colors


    【解决方案1】:

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

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

    编辑

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

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

    【讨论】:

    • 有没有办法让外部命令认为它在支持颜色的终端下运行?我检查了测试运行器的选项 - 无法强制彩色输出。
    • 如果有办法让它在关闭着色的情况下运行,那么应该有办法打开它,对吧?因此,在测试运行程序代码的某处,它正在打开或关闭着色。也许它没有直接的命令行开关,但那里有代码。也许你可以猴子修补它。但是,如果这不是一个选项,您可以尝试 ruby​​ 中的 pty 库。它在虚拟终端中运行进程。请参阅此处的方法 #7:devver.wordpress.com/2009/10/12/ruby-subprocesses-part_3
    猜你喜欢
    • 1970-01-01
    • 2021-04-20
    • 2014-01-21
    • 1970-01-01
    • 2010-10-08
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多