Проблема с кодом тревоги, нужен ввод пользователя и таймер в фоновом режиме. Таймер работает, но не останавливает программу - PullRequest
0 голосов
/ 08 ноября 2019

Я пишу код для системы охранной сигнализации, которая работает в течение заданного промежутка времени и позволяет пользователю вводить код до трех раз. Если код не был введен правильно в течение 3 раз, у меня есть оператор печати (со временем добавит его с большим количеством кода), который работает как определено, проблема в том, что мне нужно время ожидания для выполнения некоторого кода аналогичным образом. Например, если тайм-аут, а затем сделать это (по сути, перейти к той же строке кода, к которой относится ошибка ввода)

TIMEOUT = 7 # number of seconds your want for timeout
keycode ="0000";
count = 3

def interrupted(signum, frame):
    "called when read times out"
    print ('Input timeout!!  Contacting Owner!')
signal.signal(signal.SIGALRM, interrupted)


def input():    
 try:      
  count = 3
  for i in range(3,0,-1):

   userIn= raw_input("Enter the security code to disable the alarm 
system\n");
   if userIn != keycode :
             count = count-1;
             print ("Incorrect Password...Tries Remaining", count);



   else:
             print("Password accepted, security system offline");
             #BRANCHING CODE GOES HERE
             break

  if count == 0:
           print("Contacting Owner!");

           #BRANCHING CODE GOES HERE


 except:
     return


# set alarm
signal.alarm(TIMEOUT)
s = input()
# disable the alarm after success
signal.alarm(0)

После тайм-аута сообщение выводит Тайм-аут ввода !! Обращаясь к Владельцу !, но пользователь все еще может ввести пароль. Это явно не очень хорошая сигнализация! В идеале я мог бы создать оператор или в случае типа "if count == 0 или TIMEOUT: True".

1 Ответ

0 голосов
/ 09 ноября 2019

По какой-то причине добавление этого небольшого кусочка кода в раздел определения решило проблему

Я не знаю почему и не знаю как, но избавляюсь от 0 при возврате 0 или перемещенииэто пробел нарушает функциональность кодов. Если кто-нибудь может объяснить, почему это было бы удивительно.

a = 1 ;
def interrupted(signum, frame):

     a = 0;
     "called when read times out"
     print ('Input timeout!!  Contacting Owner!');
     if a == 0:
        return0
signal.signal(signal.SIGALRM, interrupted)
...