Używam skryptu Pythona do uruchomienia procesu przy użyciu subprocess.Popen
, a jednocześnie zapisuję dane wyjściowe w pliku tekstowym, a także wypisuję je na konsoli. To jest mój kod:Uzyskiwanie danych wyjściowych procesu w środowisku wykonawczym
result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in result.stdout.readlines(): #read and store result in log file
openfile.write("%s\n" %line)
print("%s" %line)
Powyższy kod działa dobrze, ale co to robi to pierwszy kończy proces i przechowuje dane wyjściowe w wyniku zmiennej. Po tym dla pętli przechowuje dane wyjściowe, a także je drukuje.
Ale chcę dane wyjściowe w czasie wykonywania (ponieważ mój proces może zająć wiele godzin, nie otrzymam żadnych wyników przez wszystkie te godziny).
Czy istnieje jakaś inna funkcja, która dynamicznie generuje dane wyjściowe (w czasie wykonywania), oznacza, że gdy tylko proces wyświetli pierwszą linię, powinien zostać wydrukowany.
Nigdy faktycznie próbowałem, ale myślę, że mają wysłać własną rękę Python 'plik' obiekt do argumentu' stdout' (lub 'stdin' lub' stderr'). Następnie musisz odpytać ten plik. "Podproces" został wymyślony, aby oszczędzić ci bólu, ale wygląda na to, że nie masz wyboru. Powodzenia. –
_ "najpierw kończy proces i przechowuje wynik w wyniku" _ - to po prostu nieprawda. – Eric
"najpierw kończy proces i przechowuje wynik w wyniku" - to po prostu nieprawda. Cóż, kiedy uruchomię polecenie Popen, działa dalej, aż proces się zakończy, a następnie wykonuje kolejne kodowanie. Jeśli działa to w jakiś inny sposób, bardzo chciałbym to wiedzieć. – Niyojan