目标:
从终端获取实时更新,无需换行。
目前我正在使用这个header('Content-Encoding: none;');
set_time_limit(0);
$handle = popen("python -m youtube_dl https://www.youtube.com/watch?v=S2JOicnUh1s", "r");
if (ob_get_level() == 0)
ob_start();
while(!feof($handle)) {
$buffer = fgets($handle);
$buffer = trim(htmlspecialchars($buffer));
echo "
";
echo $buffer ;
echo str_pad('', 4096);
echo "
";ob_flush();
flush();
sleep(1);
}
pclose($handle);
ob_end_flush();
此代码的输出
^{pr2}$
它只输出一次在下载结束时(起初它给我实时更新,后来只有一次我不知道为什么会这样)。但是在我的windows命令提示符中,我可以在一行中获得百分比和速度,而不需要换行。为此,我尝试了这个代码function execute($cmd,$stdin=null){
$proc=proc_open($cmd,array(0=>array('pipe','r'),1=>array('pipe','w'),2=>array('pipe','w')),$pipes);
fwrite($pipes[0],$stdin); fclose($pipes[0]);
$stdout=stream_get_contents($pipes[1]); fclose($pipes[1]);
$stderr=stream_get_contents($pipes[2]); fclose($pipes[2]);
$return=proc_close($proc);
return array( 'stdout'=>$stdout, 'stderr'=>$stderr, 'return'=>$return );
}
echo '
';
print_r(execute('python -m youtube_dl https://www.youtube.com/watch?v=S2JOicnUh1s'));
echo '
';失败了。。。结果就像是空的
输出Array
(
[stdout] =>
[stderr] => C:\Python27\python.exe: No module named youtube_dl
[return] => 1
)
所以有人能提供修改这些代码或新代码的建议吗?谢谢。在