AJAX Progress: чтение вывода из оболочки - PullRequest
1 голос
/ 07 февраля 2009

Цель : создать индикатор выполнения, чтобы пользователи могли проверить, сколько файлов было загружено моим сервером.

Сценарий : У меня есть скрипт PHP, который выполняет скрипт Python через popen. Я сделал это так:

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

$read = fread($handle, 4096);

pclose($handle);

Этот скрипт Python выводит в оболочку что-то вроде этого:

[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

Проблема : Когда я читаю в файле, сгенерированном выводом оболочки, я получаю весь вывод оболочки, кроме последней строки !? ПОЧЕМУ?

Просто добавим, что когда я запускаю команду через оболочку, курсор в конце оболочки появляется в конце этой строки и ожидает завершения сценария.

Спасибо всем

Ответы [ 3 ]

3 голосов
/ 07 февраля 2009

Первое, что приходит мне в голову: может быть, программа обнаруживает, что она не выполняется на TTY и, следовательно, не показывает последнюю строку, которая, вероятно, включает в себя некрасивые управляющие символы, потому что эта строка, кажется, обновляется сама?

Что происходит, когда вы перенаправляете вывод в файл (в оболочке) или пропускаете через меньший? Если вы не видите последнюю строку там, скорее всего, это так. Я не знаю другого решения, кроме как исправить источник.

0 голосов
/ 20 ноября 2013

Это будет ваш друг:

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

Дополнительную информацию можно найти здесь: Википедия

0 голосов
/ 08 февраля 2009

Вы читаете до EOF?

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

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

pclose($handle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...