如何在30秒后中断输入并退出程序?-自动注销-Python

如何在30秒后中断输入并退出程序?-自动注销-Python,python,python-3.x,input,Python,Python 3.x,Input,我想在30秒后自动注销。 程序等待用户输入一些东西,30秒后我希望程序自动关闭。 我有这样的想法: import sys, time, os def start_controller(user): start = time.time() PERIOD_OF_TIME = 30 os.system('clear') print_menu() #printing menu choice = get_choice(

我想在30秒后自动注销。 程序等待用户输入一些东西,30秒后我希望程序自动关闭。 我有这样的想法:

import sys, time, os

def start_controller(user):

   start = time.time()
   PERIOD_OF_TIME = 30
   os.system('clear')
   print_menu()                            #printing menu
   choice = get_choice()                   #get input from view model
   while choice != "0":
       os.system('clear')
       if choice == "1":
           start += PERIOD_OF_TIME
           print_student_list(Student.student_list,AllAttendance.all_attendance_list)
       if time.time() > start + PERIOD_OF_TIME:
         os.system("clear")
         print('logout')
         Database.save_all_data_to_csv()
         sys.exit()

下面是一个使用线程获取和处理用户输入并超时的简单示例

我们创建一个计时器线程来执行超时功能,并在守护进程线程中等待用户输入。如果用户在指定的延迟时间内提供输入字符串,则计时器将被取消,否则计时器将设置
完成
事件以中断
while
循环。如果需要进行任何最终清理,可以在
while
循环之后进行

from threading import Thread, Timer, Event

def process_input(timer):
    s = input('> ')
    timer.cancel()
    print(s.upper())

delay = 30
finished = Event()
while not finished.isSet():
    timer = Timer(delay, finished.set)
    worker = Thread(target=process_input, args=(timer,))
    worker.setDaemon(True)
    worker.start()
    timer.start()
    timer.join()

下面是一个使用线程获取和处理用户输入并超时的简单示例

我们创建一个计时器线程来执行超时功能,并在守护进程线程中等待用户输入。如果用户在指定的延迟时间内提供输入字符串,则计时器将被取消,否则计时器将设置
完成
事件以中断
while
循环。如果需要进行任何最终清理,可以在
while
循环之后进行

from threading import Thread, Timer, Event

def process_input(timer):
    s = input('> ')
    timer.cancel()
    print(s.upper())

delay = 30
finished = Event()
while not finished.isSet():
    timer = Timer(delay, finished.set)
    worker = Thread(target=process_input, args=(timer,))
    worker.setDaemon(True)
    worker.start()
    timer.start()
    timer.join()

if time.time()>start+PERIOD\u OF\u time:
移动到while block
get\u选项功能块吗?也就是说,就是等待用户输入的那个吗?如果它们输入不同的值又会怎样?是否在超时后仍应退出?是的,get_choice()正在返回input()。我想在启动启动控制器()时启动计时器,如果我什么都不做,30秒后它应该退出。我可以看到您正在检查值“1”。但是,如果与“1”不同,则不会显示任何错误,并且不会再次向用户请求不同的选择。那么,这部分应该如何工作呢?PS:在回复特定用户的评论时使用
@username
,这样他们就可以收到通知。将
if time.time()>开始+时段时间:
移动到while block
获取选项
功能块吗?也就是说,就是等待用户输入的那个吗?如果它们输入不同的值又会怎样?是否在超时后仍应退出?是的,get_choice()正在返回input()。我想在启动启动控制器()时启动计时器,如果我什么都不做,30秒后它应该退出。我可以看到您正在检查值“1”。但是,如果与“1”不同,则不会显示任何错误,并且不会再次向用户请求不同的选择。那么,这部分应该如何工作呢?备注:回复特定用户的评论时,请使用
@username
,以便他们收到通知。