Mam problem z wykorzystaniem podprocesu.Popen lub subprocess.call, gdy używam ich do wykonywania wierszy polecenia, które generują dużo danych wyjściowych, skrypty Pythona zawiesza się, ale co to jest dziwne, że po odczekaniu przez chwilę, gdy skrypt jest w stanie zawieszenia, stwierdzam, że zadanie zlecone przez linię cmd zostało wykonane i tylko skrypt jest zawieszony.Python: subprocess.Popen i subprocess.call zawiesza się
subprocess.call(cmd, shell = True)
#OR
subprocess.Popen(cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, shell = True)
# HANGS HERE
print "show something after subprocess"
Należy zauważyć, że ostatni wydruk nigdy nie jest wykonywany, ale faktycznie wykonano polecenie cmd.
Zauważ także, że cmd jest związane z portem szeregowym, więc gdy podłączę kabel szeregowy, wszystko stanie się w porządku, a ostatnie oznaczenie wydruku zostanie wykonane. Ale kiedy używam terminala wszystko jest w porządku, nawet jeśli serial jest podłączony, pojawia się tylko w przypadku skryptu Pythona.
Thanks a lot
Nie ma problemu, używając 'subprocess.call', jeśli nie używasz' subprocess.PIPE', którego OP nie jest. – interjay
Nie wyjaśnia, dlaczego dane wyjściowe instrukcji 'print' nie są wyświetlane w obiekcie nadrzędnym. 'Popen()' nie czeka na dziecko, nawet jeśli proces potomny jest zablokowany, próbując zapisać do potoku z pełnym buforem. – jfs