猿问

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

我有一个等待用户输入的聊天机器人,但也有一个屏幕,用户可以在其中单击一个按钮来选择一个选项。在我的 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

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


HUX布斯
浏览 202回答 1
1回答

桃花长相依

您可以将线程与消息队列一起使用:from threading import Threadfrom Queue import Queuefrom datetime import datetimeimport timedef 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.975000hello worldUSER: hello worldCHATBOT: The time is now 2019-03-01 07:42:48.976000CHATBOT: The time is now 2019-03-01 07:42:53.977000foo barUSER: foo barCHATBOT: The time is now 2019-03-01 07:42:58.977000
随时随地看视频慕课网APP

相关分类

Python
我要回答