Застрял в бесконечном l oop при попытке прочитать все строки в pro c .stdout.readline - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь прочитать каждую строку в pro c .stdout.readline и отправить строки по сети, например:

data = b''
for line in iter(proc.stdout.readline, ''):
    data += line
clientsocket.send(data)

Когда я запускаю этот код, я, кажется, застрял в inifinite l oop не может выйти на линию:

clientsocket.send(data)

Есть ли более эффективный способ чтения данных? Я пытался также с некоторое время l oop и ломая 'если не строка':

data = b''
while True:
    line += proc.stdout.readline()
    data += line
    if not line:
        break
clientsocket.send(data)

Это, кажется, также дает те же результаты. Есть ли более эффективный способ прочитать все данные из pro c .stdout.readline?

1 Ответ

0 голосов
/ 17 января 2020

Оператор: iter(proc.stdout.readline, "") будет блокировать чтение , пока не получит EOF.

Если вы хотите прочитать все строки, то вы можете просто сделать:

data = b''
data = b"".join(proc.stdout.readlines())

Нет другого решения, кроме proc для более быстрого производства линий. Если вы хотите, вы можете прочитать строки с тайм-аутом (то есть вы можете подождать, чтобы прочитать выбранное количество символов, или тайм-аут, если это количество символов не читается).

Эти ответы можно найти здесь:

...