Chciałbym użyć modułu subprocess w następujący sposób:Jak mogę dostać „w czasie rzeczywistym” informacji z powrotem z subprocess.Popen w python (2.5)
- utworzyć nowy proces, który potencjalnie wykonanie zajmuje dużo czasu.
- przechwytywania
stdout
(lubstderr
lub potencjalnie obu, razem lub osobno) - dane procesowe z podproces jak to przychodzi, może zapłonów na każdej linii otrzymały (w wxPython powiedzieć), albo po prostu ich drukowania Na razie.
Stworzyłem procesy z Popenem, ale jeśli używam komunikacji(), dane przychodzą do mnie wszystkie naraz, gdy proces się zakończy.
Jeśli utworzę osobny wątek, który blokuje readline()
z myprocess.stdout
(używając stdout = subprocess.PIPE
), nie otrzymam żadnych linii z tą metodą, dopóki proces nie zostanie zakończony. (bez względu na ustawienie bufsize)
Czy istnieje sposób radzenia sobie z tym, który nie jest horrendalny i działa dobrze na wielu platformach?
myprocess.stdout.readline() powinien działać. Czy możesz pokazać nam swój kod? –
Niebuforowane odczyty z popen_obj.stdout() powinny rzeczywiście działać - ale jeśli nie masz nic przeciwko ograniczeniu do platform z obsługą PTY, twoja aplikacja może być odpowiednia dla biblioteki Pexpect. –
To jest świetne pytanie i nadal wydaje się być bez odpowiedzi, przynajmniej w przypadku wymogu "działa dobrze na wielu platformach". –