Я работаю над простым приложением викторины, которое работает в REPL. Я хотел бы, чтобы специальная ключевая команда вручную выдвигала вопросы после того, как пользователь дал ответ. Я использую функцию для прослушивания ввода с клавиатуры для определенного нажатия клавиши, и я пытаюсь запустить эту функцию в потоке, но, как я ее настроил, поток не вернет управление основному потоку до тех пор, пока это не будет выполнено. Как я могу заставить его слушать, пока пользователь взаимодействует с приложением, печатать ответы на вопрос и затем отвечать при нажатии специальной клавиши? Любое руководство будет с благодарностью!
import os
import sys
import tty
import time
import termios
import threading
def getch():
'''detects a key press
'''
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def session(topic, limit):
question = (index for index in range(1, limit + 1))
while True:
key = getch()
if key == 'q':
print('\n\tSession Complete.')
break
elif key == 'n':
try:
topic.get_question(next(question))
time.sleep(0.2)
except (StopIteration, IndexError):
print('\n\tNo More Questions in the Queue.')
break
session_thread = threading.Thread(target=session, args=(topic, limit))
sesion_thread.start()