Nightpoison Ответов: 1

Python3 input() прерывается при получении входящего сообщения


То, что я хочу сделать, - это дождаться ввода пользователем команд на сервер. Однако, поскольку input() является блокирующим оператором, я хочу выйти из этого оператора, если будет получено входящее сообщение с сервера.

В настоящее время у меня есть две темы.

Резьба 1:
def user_input():
    global terminate
    global cmd

    while True:
        time.sleep(10)
        tLock.acquire()
        uInput = input("Enter: ")
        if(uInput == "1"):
            terminate = 1
            break
        if uInput == "2":
            mySock.mysend(cmd.getShutdown())
        if uInput == "3":
            mySock.mysend(cmd.getStartUp())
        if uInput == "4":
            mySock.mysend(cmd.getReset())

        tLock.release()


Резьба 2:

tLock.acquire()
    mySock = MySocket()
    mySock.connect()
    tLock.release()
    s1 = threading.Thread(target=user_input)
    s1.start()

    while(1):

        if mySock.dataCheck():
            tLock.acquire()
            incoming = mySock.myreceive()

            if len(incoming) > 0:
                
                print("Incoming: ", incoming)
                tLock.release()
                out = cmd.parse(incoming)

                if len(out) > 0:
                    tLock.acquire()
                    mySock.mysend(out)
                    tLock.release()

        if(terminate):
            break


Что я уже пробовал:

Я знаю, что могу сгенерировать сигнал с помощью функции signal (), чтобы создать тайм-аут для ввода, но я хотел бы сгенерировать сигнал, когда

if mySock.dataCheck():


споткнулся. Эта функция проверяет, есть ли какие-либо входящие данные. В этот момент я хочу выйти из оператора input (), а затем заблокировать входной поток. Я хочу избавиться от 10-секундной задержки, которую я использую для ожидания любых входящих сообщений.

Какое-нибудь озарение?

1 Ответов

Рейтинг:
0

Richard MacCutchan

Некоторые предложения по адресу python asyncio keyboard input - поиск в Google[^]