[Python-de] Linux fifo in Python-CGI

Gerhard Häring haering_python at gmx.de
Sat Aug 17 12:08:34 EDT 2002


* Christian Rothe <crothe at zes.com> [2002-08-16 13:22 +0200]:
> Hallo alle zusammen,
> 
> ich habe da ein Problem mit meinem python cgi. [...] Nun das Problem:
> Es ist erforderlich, dass die Daten nicht aus einer Datei, sondern aus
> einer linux-fifo gelesen werde. Diese habe ich manuell mit 'mkfifo
> fifo' angelegt. Wenn ich nun das python script von der Konsole aus
> starte und anschließend etwas von einer anderen Konsole in die fifo
> schreibe arbeitet alles wie es soll. Wenn jedoch das python script
> durch meinen Browser aufgerufen wird, kann dieser die Seite nicht
> aufbauen. Offensichtlich wird das Öffnen der fifo nicht ausgeführt,
> denn wenn ich die Zeile mit 'f=open("fifo","r",1024) auskomentiere
> funktioniert der Seitenaufbau im Browser wieder, halt ohne die
> gewünschten Daten.
> 
> Kennt sich da jemand aus??

Nicht wirklich, aber deine Beschreibung legt nahe, dass du auf der
Konsole und im CGI nicht den gleichen Code ausführst ;-) Die folgende
Simulation eines CGI (Neuöffnen des FIFOs für Leseoperationen)
funktioniert bei mir:

#!/usr/bin/env python
# fifowriter.py
END_OF_CHUNK = "--- SEPARATOR ---"

f = open("fifo", "w")
counter = 1L
while 1:
    print>> f, counter
    if counter % 10 == 0:
        print>> f, END_OF_CHUNK
        f.flush()
    counter += 1


#!/usr/bin/env python
# fiforeader.py
END_OF_CHUNK = "--- SEPARATOR ---"

while 1:
    # Simuliere CGI
    f = open("fifo")

    while 1:
        line = f.readline()
        if line.strip() == END_OF_CHUNK:
            print "end of chunk reached"
            break
        print line

    f.close()

Den Separator habe ich eingeführt, da ich ansonsten nicht wissen kann,
wann ich zum Lesen aufhören muss. Oder hast du eine konstante
Blockgröße? Vielleicht hilft dir das ein wenig weiter.
-- 
mail:   gerhard <at> bigfoot <dot> de       registered Linux user #64239
web:    http://www.cs.fhm.edu/~ifw00065/    OpenPGP public key id AD24C930
public key fingerprint: 3FCC 8700 3012 0A9E B0C9  3667 814B 9CAA AD24 C930
reduce(lambda x,y:x+y,map(lambda x:chr(ord(x)^42),tuple('zS^BED\nX_FOY\x0b')))




More information about the Python-de mailing list