[Python-de] fifo mit readline() auslesen

Christian Helmbold c.helmbold at gmx.de
Die Feb 1 15:24:28 CET 2005


Hallo,

ich möchte unter Linux aus einer Fifo (die mit "mkfifo" angelegt wurde)
lesen. Der Prozess, der liest, soll blockieren, wenn kein anderer etwas in
die Fifo geschrieben hat.

Mein Code dazu sieht so aus:

while 1:
  annahme = file("annahme")
  zeile = annahme.readline()[:-1]
  if zeile:
    print zeile + "."  
  annahme.close()

Was mir daran nicht gefällt ist, dass bei jedem Schleifendurchlauf die Datei
geöffnet und geschlossen werden muss. 

Lieber wäre mir sowas:

annahme = file("annahme")
while 1:
  zeile = annahme.readline()[:-1]
  if zeile:
    print zeile + "."  
annahme.close()

Aber da gibt es nur einen Schleifendurchlauf. Normalerweise sollte ja
readline() blockieren, wenn keine Daten zu lesen sind. Bei Python blockiert
dagegen file(). Eigentlich wäre es ja auch schön mit die Exception
abzufangen, wenn das Öffnen der Fifo fehlschlägt, aber das auch noch in die
Schleife zu packen, macht sie natürlich auch nicht schlanker...

Die Client-Prozesse sollen mit
  echo "Eine Nachricht an den Serverprozess..."
Nachrichten an den Server-Prozess schicken können. Etwas vergleichbar
einfaches wäre auch möglich, aber es sollte ein kleines Programm zum Senden
reichen, das auch noch standardmäßig installiert sein sollte.

Hat jemand eine Lösung für das Problem?

Danke
Christian


-- 
Die Abstimmung zur Einrichtung der Newsgroup de.comp.lang.python läuft noch:
http://tinyurl.com/5g5gf

10 GB Mailbox, 100 FreeSMS http://www.gmx.net/de/go/topmail
+++ GMX - die erste Adresse für Mail, Message, More +++