Abbruchbedingung beim lesen von einer Named Pipe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Dienstag 16. September 2014, 11:24

Hallo,

Wie bricht man normalerweise ab, wenn man in einer Schleife von einer Pipe liest?
Sollte ich einfach überprüfen ob die Pipe noch existiert und sie im schreibenden Prozess löschen?
Die Pipe erstelle ich mit

Code: Alles auswählen

mkfifo pipe_name
Boa
BlackJack

Dienstag 16. September 2014, 12:08

@Boa:Wie bricht man denn ab wenn man in einer Schleife aus einer regulären Datei liest? Die Frage macht wenig Sinn, weil die Antwort hauptsächlich davon abhängt was man eigentlich machen will. Wenn man den Inhalt der gesamten Datei verarbeiten möchte, dann bricht man ab wenn man am Ende angekommen ist. Also entweder wenn `read()` eine leere Zeichenkette liefert oder das ”natürliche” Ende der ``for``-Schleife wenn man über die Zeilen in der Datei iteriert. Pipes sind da nicht wirklich anders. Das Ende der Daten in einer Pipe ist erreicht wenn die Gegenseite die Datei schliesst.
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Dienstag 16. September 2014, 12:41

@BlackJack: Bei normalen Dateien hat man ein end of file. Also wie stellt man fest, dass der Schreib Prozess die Pipe geschlossen hat?
[EDIT] Um das Problem zu erläutern: Bei mir liest die Schleife einfach weiter leere Zeilen aus der Pipe, wenn ich aufhöre zu schreiben.
BlackJack

Dienstag 16. September 2014, 12:55

@Boa: Das kann nicht sein. Du kannst nichts lesen was auf der anderen Seite nicht geschrieben wird. Und wie gesagt, man erkennt das wie bei jeder regulären Datei auch.
Der Code um alle Zeilen aus einer benannten Pipe zu lesen sieht so aus:

Code: Alles auswählen

with open('testfifo') as lines:
    for line in lines:
        print line
Also nicht anders als bei anderen Dateien.
Boa
User
Beiträge: 190
Registriert: Sonntag 25. Januar 2009, 12:34

Dienstag 16. September 2014, 13:47

Danke, ich hatte vorher readline in einer Endlosschleife verwendet und gerade festgestellt, dass man dabei den Rückgabewert auf "" prüfen muss um zu sehen ob das Ende der Datei erreicht ist. Das hatte ich aus dem einzigen Beispiel kopiert, dass ich zum auslesen einer Named Pipe gefunden habe. Ich hatte mich gewundert warum die Schleife nicht einmal abbricht, wenn die Datei schon gelöscht wurde.
Antworten