在写脚本的时候, 经常会有需要调用其他命令. 而在调用一些耗时命令的时候, 我们是需要能够实时掌握脚本进度的.
一般来说, 脚本的进度通常是通过脚本的输出来获得.
如果是一个bash
脚本, 那么直接调用命令 A
就可以将执行权交出去, 然后命令 A
的输出就可以实时显示出来了.
如果是perl
脚本, 通过反引号也可以调用命令 A
, 但是结果会在命令 A
整个结束的时候才能拿到, 此时通过system 命令 A
就可以将执行权交给命令 A
, 同样, 命令 A
的输出也能够实时显示出来.
如果是PHP
脚本, 通过反引号调用, 和perl
脚本是一样的, 只能在命令A
结束是才能拿到返回. 那么PHP
脚本如何实时获取命令 A
的输出呢? 可以通过监听进程输出的形式:
function real_cmd($command){
// 执行命令并打开命令的输出指针
$handle = popen($command, 'r');
while (!feof($handle)) {
// 循环获取命令输出
$data = fgets($handle);
// 刷新输出缓冲区
ob_flush();
flush();
echo $data;
}
// 命令执行结束, 关闭指针
pclose($handle);
}