Próbuję utworzyć środowisko wykonawcze/powłokę, które będzie zdalnie uruchamiane na serwerze, który przesyła stdout, err, przez gniazdo do renderowania w przeglądarce. Wcześniej próbowałem podejścia do korzystania z subprocess.run
z PIPE
. Problem polega na tym, że dostaję standardowe wyjście po zakończeniu procesu. To, co chcę osiągnąć, to uzyskać pseudo-końcowy rodzaj implementacji typu "linia po wierszu".Użyj Pythona, aby utworzyć konsolę na żywo.
Moja obecna implementacja
test.py
def greeter():
for _ in range(10):
print('hello world')
greeter()
i w powłoce
>>> import subprocess
>>> result = subprocess.run(['python3', 'test.py'], stdout=subprocess.PIPE)
>>> print(result.stdout.decode('utf-8'))
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
jeśli staram się próbować nawet tę prostą implementację z pty
, w jaki sposób jeden to zrobić?
Sprawdź to: https://stackoverflow.com/questions/1606795/catching-stdout-in-realtime-from-subprocess –
Spróbuj użyć parametru 'bufsize = 1' do podprocesu do ustawienia bufora linii i użyj' iter (result.stdout.readline, b '') 'aby przeczytać stdout owinięty podczas True loop – Vinny