Ich dachte immer über eine Datei-wie in Python iterieren wäre gleichbedeutend mit dem Aufruf seiner readline
Methode in einer Schleife, aber heute habe ich eine Situation, wo das nicht wahr ist. Insbesondere habe ich eine Popen
‚d Prozess p
woUnterschied zwischen Iterieren über eine Datei und Aufruf von Readline
list(itertools.takewhile(lambda x: x != "\n",
p.stdout))
hängt (vermutlich weil p
wartet auf die Eingabe, die beide stdin
und stdout
sind Rohre meiner Python-Verfahren), während die folgende Arbeiten:
list(itertools.takewhile(lambda x: x != "\n",
iter(p.stdout.readline, "")))
Kann jemand den Unterschied erklären?
Seitennotiz: Anstelle von 'fiter()' können Sie 'iter (f.readline, None)' oder sogar 'iter (f.readline," \ n ")' 'takewhile()' ersetzen. –
Das Problem, das Sie sehen, hängt mit der Pufferung zusammen: 'file .__ iter __()' macht irgendwie aggressivere Pufferung als 'file.readline()' - deshalb können Sie sie auch nicht mischen. Zu faul, um die Details zu recherchieren und dies in eine Antwort im Moment zu verwandeln ... –
@SvenMarnach: du meinst 'iter (f.readline," ")', aber ja, danke, ich vergesse das immer wieder :) –