Asyncio RuntimeError: readuntil () вызывается, пока другая сопрограмма уже ожидает входящие данные - PullRequest
0 голосов
/ 05 марта 2020

Использование python3 .6.8:

Я пытаюсь создать сценарий начальной конфигурации сетевых устройств при загрузке. Мой скрипт открывает lnet соединение на "ip_addr: порт". После подключения скрипт стимулирует сетевое устройство, к которому он подключается, с помощью «\ n \ n» (имитирующего два входа «Enter» от администратора).

connection = asyncio.open_connection(
                 ip_addr,
                 port,
             )
try:
    reader, writer = await asyncio.wait_for(connection, 5)
    print(f"successfully connected to {ip_addr}:{port}")
    writer.write(b'\n\n\n')

Некоторые устройства уже настроены, и я, кроме «login»: msgstr "отображаться в буфере чтения при вводе '\ n'. Однако, если устройство еще не настроено, «login:» не будет отображаться в буфере. Поэтому я подумал, что мог бы использовать wait_for и параметр timeout, чтобы отменить это и перейти к другому reader.readuntil (...) , ожидающему другой вывод.

try:
    await asyncio.wait_for(reader.readuntil(b' login: '), 3)
    print(f"{ip_addr}:{port} alredy booted")
    break
except (asyncio.TimeoutError, OSError):
    print('Nope, moving forward')
    await reader.readuntil(b'normal setup ?(yes/no)[n]: ')

Однако это вызывает Ошибка выполнения. Читая документацию, я исключил задачу, которая должна быть отменена, если истекло время ожидания, так почему у него не может быть другой сопрограммы readuntil () ?

...