[Python-de] fifo mit readline() auslesen

Bernhard Herzog bh at intevation.de
Sam Feb 12 19:03:04 CET 2005


"Christian Helmbold" <c.helmbold at gmx.de> writes:

> ff = os.open(fifo, os.O_RDONLY)
>
> while True:
>     print "loop"
>     select.select([ff], [], [])
>     print os.read(ff, 1)
> 
> Wenn dieses Programm gestartet wird, passiert erst mal nichts. So soll es ja
> auch sein. Wenn ich dann den Befehl
> echo "test" > annahme
> ausführe dreht die Schleife durch. Echo sendet ein \n mit. Auch mit readline
> geht es nicht. 

Probier mal cat als client.  Dann siehst Du, dass dein server erst
"druchdreht" wenn die Clientseite geschlossen wird.  Du musst ff
schliessen und ggf. neu zum lesen öffnen, wenn nichts mehr gelesen
werden kann.  Z.B:


while True:
    ff = os.open(fifo, os.O_RDONLY)

    while True:
        print "loop"
        select.select([ff], [], [])
        c = os.read(ff, 1)
        if c:
            print c
        else:
            os.close(ff)
            break


  Bernhard

-- 
Intevation GmbH                                 http://intevation.de/
Skencil                                           http://skencil.org/
Thuban                                  http://thuban.intevation.org/