Ich möchte nur verstehen, was passiert im "Hintergrund" in Bezug auf die Speicherauslastung beim Umgang mit einem subprocess.Popen() Ergebnis und lesen Zeile für Zeile. Hier ist ein einfaches Beispiel.Speicherauslastung beim Lesen von Zeilen aus einem piped Subprozess stdout in Python
das folgende Skript test.py
Da prints „Hallo“, dann 10s und druckt „Welt“ wartet:
import sys
import time
print ("Hello")
sys.stdout.flush()
time.sleep(10)
print ("World")
Dann wird das folgende Skript test_sub.py
wird als subprocess ‚test.py‘ nennen, leiten Sie den stdout ein Rohr und dann Zeile für Zeile lesen:
import subprocess, time, os, sy
cmd = ["python3","test.py"]
p = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, universal_newlines = True)
for line in iter(p.stdout.readline, ''):
print("---" + line.rstrip())
In diesem Fall meine Frage wäre, wenn ich laufe test_sub.py
, nachdem es den subprocess Anruf tut, wird es „Hallo“, dann warten 10s bis „Welt“ kommt drucken und dann drucke ich t, Was passiert mit "Hello" während dieser Wartezeit? Wird es gespeichert, bis test_sub.py
endet, oder wird es in der ersten Iteration weggeworfen?
Das mag für dieses Beispiel nicht viel bedeuten, aber wenn es um wirklich große Dateien geht, tut es das auch.