Как я могу периодически просматривать вывод скрипта во время его работы?Чтение консольного вывода в реальном времени в lua
В случае youtube-dl он отправляет информацию о загрузке (progress/speed/eta) о загружаемом видео на терминал.
С помощью следующего кода я в состоянии захватить общий результат вывода скриптов (на Linux) во временный файл:
tmpFile = io.open("/tmp/My_Temp.tmp", "w+")
f = io.popen("youtube-dl http://www.youtube.com/watch?v=UIqwUx_0gJI", 'r')
tmpFile:write(f:read("*all"))
Вместо того, чтобы ждать сценария, чтобы закончить и писать все данные в в конце я бы хотел записать «моментальные снимки» последней информации, которую youtube-dl отправил на терминал.
Моя общая цель - захватить информацию о загрузке, чтобы создать индикатор выполнения с использованием Iup.
Если есть более разумные способы получения информации о загрузке, я буду рад также получить совет.
Независимо от того, можно ли использовать io.popen(), os.execute() или другие инструменты таким образом, я все равно хотел бы знать, как захватить вывод консоли в реальном времени.
Это не будет работать, а для двоичных данных, хотя. Во-первых, потому что вы, вероятно, не увидите, что много '\ n' в нем и второе, потому что оно будет фильтровать их и' \ r \ n'. Лучше читать заданный максимальный размер буфера, например 'pipe: read (4 * 1048576)' – dualed
@dualed - Да, даже для чтения с чистого текста с чисто читаемым текстом целые строки могут оказаться непригодными для получения текущего положения индикатора выполнения добавив одну звезду за раз. –
@EgorSkriptunoff Тест ping работал, однако, пытаясь использовать его с youtube-dl (с печатью), я обнаружил, что он зависает прямо до появления информации о прогрессе, он ждет здесь до тех пор, пока он не будет завершен, а затем просто распечатает последний бит прогресса , поэтому мне нужно найти другой способ решить мою проблему. – logen