0

目的: 端末から改行なしでリアルタイム更新を取得する。現在、私はこれを使用しています

    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 "<pre>";
        echo $buffer ;
        echo str_pad('', 4096);
        echo "</pre>";
        ob_flush();
        flush();
        sleep(1);
    }
    pclose($handle);
    ob_end_flush();

このコードの出力

            [youtube] S2JOicnUh1s: Downloading webpage
            [youtube] S2JOicnUh1s: Downloading video info webpage
            [download]   0.0% of 3.26MiB at 12.82KiB/s ETA 04:20
            [download]   0.1% of 3.26MiB at 38.46KiB/s ETA 01:26
            [download]   0.2% of 3.26MiB at 89.74KiB/s ETA 00:37
            [download]   0.4% of 3.26MiB at 79.79KiB/s ETA 00:41
            [download]   0.9% of 3.26MiB at 79.28KiB/s ETA 00:41
            ....................................................
            ....................................................
            [download]  98.1% of 3.26MiB at 72.50KiB/s ETA 00:00
            [download] 100.0% of 3.26MiB at 72.66KiB/s ETA 00:00
            [download] 100% of 3.26MiB in 00:45 

ダウンロードの最後に 1 回だけ出力されます (最初は、なぜこれが起こるのかわかりません)。しかし、私のWindowsコマンドプロンプトでは、改行なしで1行でパーセンテージと速度を取得しています。そのために、私はこのコードを試しました

        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 '<pre>';
  print_r(execute('python -m youtube_dl https://www.youtube.com/watch?v=S2JOicnUh1s'));
  echo '</pre>';

失敗しました...空のようになります

出力

Array
  (
    [stdout] => 
    [stderr] => C:\Python27\python.exe: No module named youtube_dl

    [return] => 1
  )

では、これらのコードまたは新しいコードを変更するための提案を誰でも提供できますか? ありがとう。

4

1 に答える 1