fifo - Lesen in einer Schleife

Möchte ich os.mkfifo für die einfache Kommunikation zwischen Programmen. Ich habe ein problem mit dem Auslesen aus der fifo in einer Schleife.

Betrachten Sie dieses Spielzeug Beispiel, wo ich eine reader und eine writer-arbeiten mit dem fifo. Ich möchte in der Lage zu laufen, den Leser in eine Schleife, um alles zu Lesen, das in den fifo.

# reader.py
import os
import atexit

FIFO = 'json.fifo'

@atexit.register
def cleanup():
    try:
        os.unlink(FIFO)
    except:
        pass

def main():
    os.mkfifo(FIFO)
    with open(FIFO) as fifo:
#        for line in fifo:              # closes after single reading
#        for line in fifo.readlines():  # closes after single reading
        while True:
            line = fifo.read()          # will return empty lines (non-blocking)
            print repr(line)

main()

Und die Schriftsteller:

# writer.py
import sys

FIFO = 'json.fifo'


def main():
    with open(FIFO, 'a') as fifo:
        fifo.write(sys.argv[1])

main()

Wenn ich python reader.py und später python writer.py foo, "foo" wird gedruckt, aber der fifo wird geschlossen, und der Leser wird verlassen (oder spin im inneren des while loop). Ich möchte die Leser in der Schleife bleiben, so kann ich das ausführen der Verfasser viele Male.

Bearbeiten

Ich dieses snippet zu behandeln Sie das Problem:

def read_fifo(filename):
    while True:
        with open(filename) as fifo:
            yield fifo.read()

aber vielleicht gibt es etwas ordentlicher Weise, es zu handhaben, statt wiederholt öffnen der Datei...

Verwandte

InformationsquelleAutor Jakub M. | 2013-07-03
Schreibe einen Kommentar