bash脚本的php实时输出(如果输出被过滤)

时间:2018-09-20 11:59:11

标签: php bash

首先..我的PHP知识非常差。

目标是通过网页显示bash脚本的实时内容。 bash脚本本身具有三个任务:

  1. 准备数据
  2. 一些有关用户的信息
  3. 执行bin文件

所有作品...但是显示的内容不是我期望的。 更精确的是:时间顺序

bin文件会产生大量不需要的信息。所以我用grep和sed过滤内容:

如果我不使用“ grep”和“ sed”进行过滤...输出是实时的。

如果我使用“ grep”和“ sed” .... bin文件的输出仅在执行后显示。

Timecode 0s: Hello
Timecode 17:  Generating Baseline: 1/9  4000/4000 6.586
Timecode 17:  Generating Agi: 2/9  4000/4000 6.563
Timecode 17: Generating AP: 3/9  4000/4000 6.567

这就是输出的样子:

Timecode 0s: Hello
Timecode 4:  Generating Baseline: 1/9  4000/4000 6.586
Timecode 6:  Generating Agi: 2/9  4000/4000 6.563
Timecode 10: Generating AP: 3/9  4000/4000 6.56

为什么? 我如何解决此问题...过滤“ simc”的输出并实时转发输出?

代码:

bash脚本部分:

#!/bin/bash
echo "Hello"
simc $PLAYER $COMMAND html=/tmp/report_manual.html | grep --line-buffered "Generating" | sed 's/\[.*\]//g'

exit
  • 也进行了不带“-行缓冲”的测试

php脚本部分:

<?php
ob_end_flush();
ob_implicit_flush();

$char_name = $_POST["char_name"];

$cmd = "bash /home/nas/script/simc/webclient.sh {$char_name} 2>&1";

while (@ ob_end_flush()); // end all output buffers if any
        $proc = popen($cmd ,'r');
        echo '<pre>';
while (!feof($proc))
{
        echo fread($proc, 2098);
        @ flush();
}
echo '</pre>';
?>

编辑: PHP reading shell_exec live output没有涵盖我的问题。

0 个答案:

没有答案
相关问题