在PHP的popen中格式化输出bash脚本

时间:2019-07-31 09:37:18

标签: php bash

在我的PHP脚本中,我正在使用popen()执行bash脚本,然后输出响应。但是响应具有不同的编码,我不知道如何转换。

我试图将其转换为utf8,但没有结果。还尝试将语言环境设置为nl_NL.utf8。

PHP函数:

while (@ ob_end_flush()); // end all output buffers if any

$proc = popen("$cmd 2>&1 ; echo Exit status : $?", 'r');

$live_output     = "";
$complete_output = "";

while (!feof($proc))
{
    $live_output     = fread($proc, 4096);
    $complete_output = $complete_output . $live_output;
    echo "$live_output";
    @ flush();
}

pclose($proc);

示例响应:

[2K[1A[2K[G
[2K[1A[2K[G⠋ load plugins
[2K[1A[2K[Gsuccess load plugins - 0.975 s
⠋ load plugins

这应该是:

success load plugins - 0.975 s

⠋是正在移动的装载机。这可能是问题吗?还是这些字符是该行的颜色代码?

1 个答案:

答案 0 :(得分:0)

这些是ANSI Escape Sequences,它们不是bash命令,而是用于在一行上为输出着色或替换/更新输出的控制台命令。

通常命令会提供一个—no-color标志。

此外,还存在用于常见命令NO_COLOR的环境变量。 这是禁用彩色输出的常见标志/变量的列表=> https://no-color.org/

否则,您始终可以使用正则表达式过滤输出:/(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]/