Вопрос

У меня есть приложение командной строки, которое непрерывно выводит данные YAML в виде:

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

Он делает это вечно. Я хотел бы написать скрипт на Python, который непрерывно читает каждую из этих записей.

Библиотека PyYAML лучше всего воспринимает полностью загруженные строки и интерпретирует их как полный документ YAML. Есть ли способ поместить PyYAML в "потоковое"? режим?

Или это мой единственный вариант - разбивать данные на части и постепенно передавать их в PyYAML?

Это было полезно?

Решение

Вот то, что я в итоге использовал, так как, похоже, нет встроенного метода для выполнения того, что я хочу. Эта функция должна быть достаточно универсальной, чтобы она могла читать в потоке YAML и возвращать объекты верхнего уровня при их обнаружении.

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

Кто-нибудь может сделать лучше?

Другие советы

Кажется, что все ссылки на поток в документации относятся к потоку документов ... Я никогда не пытался использовать его так, как вы описываете, но похоже, что данные разбиваются на потоки. документов разумный подход.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top