如何使用php执行shell cmd(python)并打印所有不断更新的输出?

如何使用php执行shell cmd(python)并打印所有不断更新的输出?,php,python,linux,shell,Php,Python,Linux,Shell,事实上,我对php还很陌生。所以,事情是这样的: 我想为著名的youtube dl制作一个简单的web shell,因此我制作了一个简单的网页和一个简单的php页面,试图使用php执行youtube dl并向浏览器显示所有输出 我尝试了命令thing和escapeshellcmd(),它们都可以从youtube dl输出前几行不断更新的输出(它们与其他一些cmd(如“ls”)配合得很好),但似乎当它得到第一行时,python脚本就停止了,不再更新,我的服务器上也没有下载的视频文件 顺便说一句,都

事实上,我对php还很陌生。所以,事情是这样的: 我想为著名的youtube dl制作一个简单的web shell,因此我制作了一个简单的网页和一个简单的php页面,试图使用php执行youtube dl并向浏览器显示所有输出

我尝试了
命令
thing和escapeshellcmd(),它们都可以从youtube dl输出前几行不断更新的输出(它们与其他一些cmd(如“ls”)配合得很好),但似乎当它得到第一行时,python脚本就停止了,不再更新,我的服务器上也没有下载的视频文件

顺便说一句,都在Ubuntu 14 LTS上

到目前为止,我已经尝试了以下方法:

    <?php
    $command = shell_exec('youtube-dl https://www.youtube.com/watch?v=z456k6yBeo0');
    echo "<pre>$command</pre>";
    ?>


它们都可以很好地与“ls”配合使用,但与youtube dl配合不好


尝试以下方法:


尝试以下方法:


尝试以下方法:


你问题中的这个例子对我很有用:

<?php
$cmd = 'youtube-dl https://www.youtube.co/watch?v=z456k6yBeo0';
exec(escapeshellcmd($cmd), $output, $status);
if ($status) echo "Exec command failed.";
else echo var_dump($output);

你问题中的这个例子对我很有用:

<?php
$cmd = 'youtube-dl https://www.youtube.co/watch?v=z456k6yBeo0';
exec(escapeshellcmd($cmd), $output, $status);
if ($status) echo "Exec command failed.";
else echo var_dump($output);

你问题中的这个例子对我很有用:

<?php
$cmd = 'youtube-dl https://www.youtube.co/watch?v=z456k6yBeo0';
exec(escapeshellcmd($cmd), $output, $status);
if ($status) echo "Exec command failed.";
else echo var_dump($output);

你问题中的这个例子对我很有用:

<?php
$cmd = 'youtube-dl https://www.youtube.co/watch?v=z456k6yBeo0';
exec(escapeshellcmd($cmd), $output, $status);
if ($status) echo "Exec command failed.";
else echo var_dump($output);

所以我设法解决了这个问题@zahyur是对的,这是关于许可的。因为我习惯于使用root来管理服务器,所以在shell中执行命令时不会出现任何问题。但服务器需要额外的权限来执行命令,以便在目录中写入内容


解决方案是构建一个新目录,并授予它写访问权,在该目录中执行命令,这样就不会有任何问题

所以我设法解决了这个问题@zahyur是对的,这是关于许可的。因为我习惯于使用root来管理服务器,所以在shell中执行命令时不会出现任何问题。但服务器需要额外的权限来执行命令,以便在目录中写入内容


解决方案是构建一个新目录,并授予它写访问权,在该目录中执行命令,这样就不会有任何问题

所以我设法解决了这个问题@zahyur是对的,这是关于许可的。因为我习惯于使用root来管理服务器,所以在shell中执行命令时不会出现任何问题。但服务器需要额外的权限来执行命令,以便在目录中写入内容


解决方案是构建一个新目录,并授予它写访问权,在该目录中执行命令,这样就不会有任何问题

所以我设法解决了这个问题@zahyur是对的,这是关于许可的。因为我习惯于使用root来管理服务器,所以在shell中执行命令时不会出现任何问题。但服务器需要额外的权限来执行命令,以便在目录中写入内容



解决方案是构建一个新目录,并授予它写访问权,在该目录中执行命令,这样就不会有任何问题

我相当肯定这与python无关。。。此外,如果没有实际的代码示例,您几乎不可能得到任何答案,更不用说解决问题的答案了problem@JoranBeasley您好,谢谢您的帮助,我已经更新了codesim,非常确定这与python无关。。。此外,如果没有实际的代码示例,您几乎不可能得到任何答案,更不用说解决问题的答案了problem@JoranBeasley您好,谢谢您的帮助,我已经更新了codesim,非常确定这与python无关。。。此外,如果没有实际的代码示例,您几乎不可能得到任何答案,更不用说解决问题的答案了problem@JoranBeasley您好,谢谢您的帮助,我已经更新了codesim,非常确定这与python无关。。。此外,如果没有实际的代码示例,您几乎不可能得到任何答案,更不用说解决问题的答案了problem@JoranBeasley嗨,谢谢你的帮助,我已经更新了密码链接,只有答案是不赞成的。。。另外,官方语言是英语+1,我认为这是正确的答案,``和escapeshellcmd()在使用ls时实际上工作得很好,就像shell_exec()一样。但仍然无法从youtube dl输出所有打印内容,并且无法下载视频链接,只有答案是不被接受的。。。另外,官方语言是英语+1,我认为这是正确的答案,``和escapeshellcmd()在使用ls时实际上工作得很好,就像shell_exec()一样。但仍然无法从youtube dl输出所有打印内容,并且无法下载视频链接,只有答案是不被接受的。。。另外,官方语言是英语+1,我认为这是正确的答案,``和escapeshellcmd()在使用ls时实际上工作得很好,就像shell_exec()一样。但仍然无法从youtube dl输出所有打印内容,并且无法下载视频链接,只有答案是不被接受的。。。另外,官方语言是英语+1,我认为这是正确的答案,``和escapeshellcmd()在使用ls时实际上工作得很好,就像shell_exec()一样。但是仍然无法从youtube dl输出所有打印内容,也无法下载视频谢谢你的回复,但是escapeshellcmd只打印了
[generic]watch?v=z456k6yBeo0:请求头[redirect],然后重定向到https://www.youtube.com/watch?gl=CO&v=z456k6yBeo0&hl=es-419[youtube]z456k6yBeo0:下载网页[youtube]z456k6yBeo0:提取视频信息[youtube]z456k6yBeo0:正在将DASH manifest
下载到页面并停止,没有更多更新,我的服务器上也没有看到下载的视频。我的也是5.5.9。直接从shell执行时是否正常工作?您的脚本是否具有对其当前目录的写入权限?如果没有,或者您希望使用其他目录,您可以添加第四个参数使用不同路径打开初始工作目录的步骤:$
<?php
$descriptorspec = array(0 => array("pipe", "w"), 2 => array('file', '/tmp/youtube-dl-errors',  'a'));
$command = escapeshellcmd('youtube-dl https://www.youtube.co/watch?v=z456k6yBeo0');
$handle = proc_open($command, $descriptorspec, $pipes);
echo stream_get_contents($pipes[0]);
echo file_get_contents('/tmp/youtube-dl-errors');
proc_close($handle);
<?php
$cmd = 'youtube-dl https://www.youtube.co/watch?v=z456k6yBeo0';
exec(escapeshellcmd($cmd), $output, $status);
if ($status) echo "Exec command failed.";
else echo var_dump($output);