Frage

Ich habe eine Befehlszeile app die kontinuierlich ausgibt YAML Daten in der Form:

- col0: datum0
  col1: datum1
  col2: datum2
- col0: datum0
  col1: datum1
  col2: datum2
...

Es tut dies für alle Ewigkeit. Ich möchte ein Python-Skript schreiben, die kontinuierlich jede dieser Aufzeichnungen liest.

Die PyYAML Bibliothek scheint am besten bei vollständig geladenen Strings zu nehmen und diese als komplettes YAML Dokument zu interpretieren. Gibt es eine Möglichkeit PyYAML in einen „Streaming“ -Modus zu setzen?

Oder ist meine einzige Option, um chunk die Daten selbst und er Stück für Stück in PyYAML?

War es hilfreich?

Lösung

Hier ist, was ich am Ende mit, da es keine integrierte Methode für die Erfüllung zu sein scheint, was ich will. Diese Funktion sollte allgemein genug sein, dass es in einem Strom von YAML lesen und Top-Level-Objekten zurück, wie sie angetroffen werden.

def streamInYAML(stream):
    y = stream.readline()
    cont = 1
    while cont:
        l = stream.readline()
        if len(l) == 0:
            cont = 0
        else:
            if l.startswith(' '):
                y = y + l
            else:
                yield yaml.load(y)
                y = l

Kann jemand besser machen?

Andere Tipps

Alle diese Referenzen in der Dokumentation zu streamen scheinen zu einem Strom von Dokumenten zu beziehen ... Ich habe nie versucht, es in der Art und Weise zu verwenden, die Sie beschreiben, aber es scheint, als ob die Daten in einem solchen Strom Chunking von Dokumenten ist ein sinnvoller Ansatz.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top