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

时间:2019-03-01 15:20:09

标签: python python-2.7 input callback

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

当然,调用权或来自用户的输入可能需要花费一些时间,因此不希望使用计时器。我该怎么办?

1 个答案:

答案 0 :(得分: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