스크립트가 실행되는 동안 주기적으로 출력물을 읽을 수 있도록하려면 어떻게해야합니까?lua에서 콘솔 출력을 실시간으로 읽음
youtube-dl의 경우, 다운로드되는 비디오에 대한 다운로드 정보 (진행률/속도/η)를 터미널에 보냅니다. 나는 임시 파일 (리눅스에서) 스크립트 출력의 전체 결과를 캡처 할 수 있어요 다음 코드와
:
대신에 모든 데이터를 완료하기 위해 스크립트를 기다리고 및 작성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() 또는 다른 도구를 이와 같은 방법으로 사용할 수 있다면 실시간 콘솔 출력을 캡처하는 방법을 알고 싶습니다.
이 비록 바이너리 데이터에 잘 작동하지 않을 것입니다. 왜냐하면 그것들과'\ r \ n'을 걸러 내기 때문입니다. 'pipe : read (4 * 1048576)'와 같은 지정된 최대 버퍼 크기를 읽는 것이 더 낫습니다. – dualed
@dualed - 예, 사람이 읽을 수있는 순수 텍스트 출력의 경우에도 전체 라인을 읽는 것이 진행 막대의 현재 위치를 얻는 데 적합하지 않을 수 있습니다 한 번에 하나의 별을 추가하여 –
@EgorSkriptunoff ping 테스트가 작동했지만 youtube-dl (프린트 포함)으로 시도해 보았습니다. 진행 정보가 표시되기 전에 멈추는 것을 발견했습니다. 완료 될 때까지 여기에서 대기 한 다음 진행의 마지막 비트를 인쇄합니다 그래서 나는 내 문제를 해결하는 다른 방법을 찾아야한다. – logen