简体   繁体   中英

How to interrupt input after 30 seconds and quit from program? - automatic logout - Python

I would like to make automatic logout after 30 seconds. Program waits for user to input something and after 30 seconds I would like program to automatically shut down. I have something like this:

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()

Here's a simple example of using threads to get and process user input with a timeout.

We create a Timer thread to perform the timeout function, and wait for the user input in a daemon thread. If the user supplies an input string within the nominated delay period then the Timer is cancelled, otherwise the Timer will set the finished Event to break the while loop. If you need to do any final cleanup, you can do that after the while loop.

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()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM