Chcę rozpocząć program, który potrzebuje kilku minut na zakończenie. W tym czasie chcę przeczytać komunikat o postępie programu (który jest wydrukowany na standardowym wyjściu). Problem polega na tym, że nie mogę znaleźć sposobu na odczytanie jego wyników w czasie jego działania.Uzyskiwanie wiadomości o postępie z podprocesu
Jedyną funkcją, którą odczytałem dane wyjściowe programu, jest Popen.communicate()
, ale ta metoda czeka, aż proces się zakończy. Nie można więc uzyskać postępu i uczynić go widocznym dla użytkownika w specjalnie sformatowany sposób.
Czy można to zrobić w inny sposób?
Po uruchomieniu procesu z subprocess.popen
z moim skryptem widzę dane wyjściowe programu na ekranie. Czy można to ukryć? (Ubuntu 10.10, normalny terminal)
Co zrobić, jeśli niektóre dane pojawią się po zerwaniu pętli while? – Neo
@Neo: jego przykład rozbija się na EOF, co oznacza, że po tym nie mogą już dotrzeć żadne dane. ALE, aby odpowiedzieć na implikację twojego pytania: jeśli nie czytasz standardowego potoku, bufor może wypełnić, a podproces blokuje próbę napisania stdout. – payne
Będzie czekał na ciebie w p.stdut, aby użyć później. Jednak wywołanie readline będzie blokować aż do pojawienia się nowego wejścia lub zamknięcia rury. Dodano kilka przykładowych skryptów. – chmullig