警报代码有问题,需要用户输入和后台计时器。计时器工作,但不会停止程序
Problem with alarm code, need user input and timer in background. Timer works, but doesn't stop program
我正在为一个警报系统编写代码,该系统运行预定义的时间并允许用户最多输入代码 3 次。如果代码在 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 or TIMEOUT: True" 之类的地方创建一个 or 语句。
出于某种原因,将这一点代码添加到定义部分解决了问题
我不知道为什么,我也不知道怎么做,但是去掉 return0 上的 0 或将它移动 space 会破坏代码功能。如果有人能解释为什么那会很棒。
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)
我正在为一个警报系统编写代码,该系统运行预定义的时间并允许用户最多输入代码 3 次。如果代码在 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 or TIMEOUT: True" 之类的地方创建一个 or 语句。
出于某种原因,将这一点代码添加到定义部分解决了问题
我不知道为什么,我也不知道怎么做,但是去掉 return0 上的 0 或将它移动 space 会破坏代码功能。如果有人能解释为什么那会很棒。
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)