【问题标题】:Unable to suppress output of dos2unix command in jenkins console output无法在詹金斯控制台输出中抑制 dos2unix 命令的输出
【发布时间】:2017-03-15 10:36:57
【问题描述】:

我有一个由 Jenkins 触发的项目,它在 PHP exec 中包含以下命令 -

$dos2unix = exec("dos2unix ".$filePath);

它在 Jenkins 控制台输出中显示了以下不需要的命令输出,并使屏幕混乱 -

dos2unix: converting file /home/jenkins/deployment_beta/phing/scratchpad/adserver/app/webroot/openx/lib/OA/Dal/Delivery/mysql.php to UNIX format ...
dos2unix: converting file /home/jenkins/deployment_beta/phing/scratchpad/adserver/app/webroot/openx/lib/OA/Dal/Maintenance/Statistics/Common.php to UNIX format ...

我尝试将命令包装在 ob_start() 和 ob_end_clean() 中,并将输出定向到 /dev/null -

ob_start();
$dos2unix = exec("dos2unix ".$filePath." > /dev/null");
ob_end_clean();

但是,我在控制台输出中仍然得到相同的结果。

注意 - 如果我在命令行中手动触发构建,无论我是否已将输出定向到 /dev/null 或包装在输出缓冲区语句中,我都不会看到这个不需要的输出。

我已阅读Suppressing output from exec() calls in PHP,但无法解决问题。

【问题讨论】:

    标签: php jenkins dos2unix


    【解决方案1】:

    dos2unix 将其消息打印到标准错误。要重定向它们,您需要使用 2> 而不是 >.

    $dos2unix = exec("dos2unix ".$filePath." 2> /dev/null");
    

    另一个选项是使用选项 -q。使用 -q dos2unix 将不会打印消息,并且在出现问题时不会返回错误代码。

    $dos2unix = exec("dos2unix -q ".$filePath.");
    

    【讨论】:

    • 有什么方法可以收集任何一种情况下的输出(无论错误如何),但同时抑制控制台输出,还是我自相矛盾?
    • 我想在 $dos2unix 中收集输出并能够处理错误/成功。
    • 我终于做到了 - $returnVal = exec("sudo dos2unix 2>&1 ".$filePath,$outputArray,$result); if(count($outputArray)>0) { $finalLine = $outputArray[count($outputArray)-1]; $success = $result==0 && ($finalLine == "dos2unix: converting file ".$filePath." to UNIX format ..."); } 可能我应该只依赖 $result。
    • 我从未使用过 Jenkins。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 2017-12-21
    • 2014-05-14
    相关资源
    最近更新 更多