Python:等待用户输入或回调,以先到者为准

问题描述 投票:1回答:1

我有一个聊天机器人等待用户输入,但也有一个屏幕,用户可以点击按钮选择一个选项。在我的python代码中,我可以通过回调获得所选的选项,并且我还有一个无限循环,等待聊天机器人响应后的用户输入。我想问用户一个问题,但允许他们输入答案或从屏幕上选择一个选项。所以我想要或多或少的东西:

inp = ""
while(True):
    answer, end = get_answer(inp)
    print('CHATBOT: '+ answer)
    if end = break
    if input by user:
         inp = input by user
    elif callback:
         inp = callback value

当然,来自用户的回调或输入可能需要一段时间才能给出,因此计时器是不可取的。我怎么能这样做?

python python-2.7 input callback
1个回答
1
投票

您可以将线程与消息队列一起使用:

from threading import Thread
from Queue import Queue
from datetime import datetime
import time

def chatbot(queue):
    while True:
        queue.put('CHATBOT: The time is now %s' % datetime.now())
        time.sleep(5)

def user_input(queue):
    while True:
        queue.put('USER: ' + raw_input())

queue = Queue()
chatbot_thread = Thread(target=chatbot, args=(queue,))
input_thread = Thread(target=user_input, args=(queue,))
chatbot_thread.start()
input_thread.start()
while True:
    print(queue.get())

样本输入/输出:

CHATBOT: The time is now 2019-03-01 07:42:43.975000
hello world
USER: hello world
CHATBOT: The time is now 2019-03-01 07:42:48.976000
CHATBOT: The time is now 2019-03-01 07:42:53.977000
foo bar
USER: foo bar
CHATBOT: The time is now 2019-03-01 07:42:58.977000
© www.soinside.com 2019 - 2024. All rights reserved.