我正在研究类似的问题。我必须解析我的视频转换 shell 脚本的输出。我使用popen
并解析返回的输出resource
。起初我使用fgets
但没有将更新的值识别为新行。所以我创建了一个简单的函数来接受一个可选的$arg_delimiter
,这样你就可以检查其他返回类型,比如chr(13)
回车。示例代码稍作修改,因此未经测试,因为在我的情况下,这些函数是我的解析器对象上的方法。
function get_line ($arg_handle, $arg_delimiter = NULL)
{
$delimiter = (NULL !== $arg_delimiter) ? $arg_delimiter : chr(10);
$result = array();
while ( ! feof($arg_handle))
{
$currentCharacter = fgetc($arg_handle);
if ($delimiter === $currentCharacter)
{
return implode('', $result);
}
$result[] = $currentCharacter;
}
return implode('', $result);
}
我只是循环这样的结果popen()
resource
:
$command = '/usr/bin/yourcommand';
$handle = popen($command . ' 2>&1', 'r');
while ( ! feof($handle))
{
$line = get_line($handle, chr(13));
preg_match($yourParserRegex, $line, $data);
if (count($data) > 0)
{
printf("<script type='text/javascript'>\n //<![CDATA[\n window.alert('Result: %s');\n // ]]>\n</script>"
,$data[1]
);
flush();
}
}
现在你需要做的就是弄清楚彗星的东西。