PyGObject: как определить конец Gio.DataInputStream? - PullRequest
0 голосов
/ 27 февраля 2020

Я создаю приложение GTK-3 в Python (точнее, 3.6), которое запускает внешний двоичный файл в Gio.Subprocess и считывает, что это вывод из Gio.DataInputStream. Я следую этому рецепту , чтобы читать вывод построчно с помощью асинхронных операций. Это происходит в al oop из queue_read() и в обратном вызове _on_data(), который прерывается только self.cancellable, вызванным _on_finished(), или возможным исключением во время чтения из потока.

В зависимости от В параметрах, используемых для вызова внешнего процесса, существует некоторая произвольная задержка между каждой строкой вывода (каждая строка представляет собой единицу измеренных значений, которая должна отображаться, как только она становится доступной). Также может случиться, что мой порожденный процесс завершится, прежде чем все будет прочитано из потока. Поэтому я не могу отменить чтение в _on_finished(), как в связанном коде - мне нужно читать, пока я не получу конец файла потока, а затем опустить, чтобы запланировать чтение другой строки.

Как проверить eof на Gio.DataInputStream?

Например, в потоках C ++ io есть флаг, указывающий это условие. Gio.DataInputStream также повышает GLib.Error в определенных ситуациях. Но ни один флаг здесь не доступен, и в этом случае не возникает ошибка. Единственное условие, с которым я столкнулся, - это то, что асинхронная операция чтения c (обратный вызов _on_data()) завершается немедленно с line, установленным на None после завершения подпроцесса, и больше никаких данных из потока недоступно. Если это путь к go, это где-то задокументировано?

...