php proc_open模拟终端,php终端实时更新(popen或proc_open)

目标:

从终端获取实时更新,无需换行。

目前我正在使用这个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

)

所以有人能提供修改这些代码或新代码的建议吗?谢谢。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值