Python Lesen stream

Brauche ich eine sehr preiswert Lesen eines Puffers mit kein abschließendes string (stream) in Python. Dies ist, was ich habe, aber es verschwendet viel CPU-Zeit und Aufwand. Weil es ständig "versuchen und fangen." Ich brauche wirklich einen neuen Ansatz.

Hier ist eine reduzierte funktionierende version von meinem code:

#! /usr/bin/env/python
import fcntl, os, sys

if __name__ == "__main__":
    f = open("/dev/urandom", "r")
    fd = f.fileno()
    fl = fcntl.fcntl(fd, fcntl.F_GETFL)
    fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)

    ready = False
    line = ""
    while True:
        try:
            char = f.read()
            if char == '\r':
                continue
            elif char = '\n':
                ready = True
            else:
                line += char
        except:
            continue
        if ready:
            print line

Nicht Befehl in das terminal. Es ist einfach zur illustration. "urandom" bricht Ihr terminal, weil es spuckt eine Menge von zufälligen Zeichen, dass der terminal-emulator interpretiert, egal was (die können Ihre aktuelle Schalen-Einstellungen, Titel, etc). Ich Las von einem gps über usb angeschlossen.

Das problem: diese nutzt 100% der CPU-Auslastung, wenn es kann. Ich habe dies ausprobiert:

#! /usr/bin/env/python
import fcntl, os, sys

if __name__ == "__main__":
    f = open("/dev/urandom", "r")
    fd = f.fileno()
    fl = fcntl.fcntl(fd, fcntl.F_GETFL)
    fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)

    for line in f.readlines():
        print line

Allerdings bekomme ich IOError: [Errno 11] Resource temporarily unavailable. Ich habe versucht, zu verwenden Popen unter anderem. Ich bin an einem Verlust. Kann mir bitte jemand eine Lösung anbieten (und bitte alles erklären, ich bin kein pro, pro se). Ich sollte auch beachten, dass dies für Unix (insbesondere Linux, aber es muss tragbar sein für alle Versionen von Linux).

InformationsquelleAutor der Frage dylnmc | 2014-09-30

Schreibe einen Kommentar