AJAX İlerleme: Shell okuma çıktı

4 Cevap php

Objective: Kullanıcılar sunucu tarafından indirildi ne kadar bir dosyanın kontrol edebilirsiniz bir ilerleme çubuğu olun.

Scenario: Ben popen üzeri python komut yürütüldüğünde bir PHP komut dosyası var. Ben şöyle yapmış:

$handle = popen('python last', 'r');

$read = fread($handle, 4096);

pclose($handle);

Bu python komut dosyası böyle kabuk şey çıktılar:

[last] ZVZX-W3vo9I: Downloading video webpage
[last] ZVZX-W3vo9I: Extracting video information
[download] Destination: myvideo.flv
[download]   9.9% of 10.09M at    3.30M/s ETA 00:02

Problem: Ben kabuk çıktı tarafından oluşturulan dosyadaki okuduğumda ben son satırı hariç tüm kabuk çıktı olsun!? NEDEN?

Ben kabuk aracılığıyla komutu çalıştırdığınızda sadece eklemek için, kabuk imleci o satırın sonunda görünür ve komut bitene kadar bekler.

Tüm teşekkürler

4 Cevap

Aklıma gelen ilk şey: belki programı bir daktiloya idam değildir ve bu nedenle, bu çizgi kendisini güncellemek üzere gibi görünüyor çünkü muhtemelen çirkin kontrol karakterleri içeren son satırı, görünmüyor ki algılar?

Eğer (kabuk) bir dosyaya çıktı, ya da daha az boru aracılığıyla yönlendirin ne olur? Orada son satırı görmüyorsanız, bu durumda olması muhtemeldir. Kaynağını saptamak üzere daha başka bir çözüm bilmiyorum.

Sadece emin çıkışını tampon değil yapmak için, python komut sonunda sys.stdout.flush () koyarak deneyebilirsiniz.

Eğer EOF kadar okuyor musun?

$handle = popen('python last', 'r');
$read   = "";

while (!feof($handle)) {
  $read .= fread($handle, 4096);
}

pclose($handle);

Bu arkadaşınız olacak:

$handle = popen('python last 2>&1', 'r');

Ayrıntılı bilgi burada bulunabilir: Wikipedia