【问题标题】:Python: waiting for user input or callback, whichever comes firstPython:等待用户输入或回调,以先到者为准
【发布时间】:2019-03-01 15:20:09
【问题描述】:

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

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

【问题讨论】:

    标签: python python-2.7 input callback


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 2021-01-19
      • 1970-01-01
      相关资源
      最近更新 更多