在Python中使用条件退出捕获SIGINT

时间:2015-06-10 15:01:13

标签: python

我想在Python脚本中捕获SIGINT信号。但是,只有在用户在发送SIGINT后输入正确的密码时,脚本才会终止。这可以用Python完成吗?一些示例代码来说明问题:

import signal

def signal_handler(signal, frame):
    password = raw_input("Enter password: ")
    if password != "secret":
        print("Wrong password!")
        # TODO don't let process end
    else:
        print("Password correct. Exiting now.")

signal.signal(signal.SIGINT, signal_handler)

编辑:将变量'pass'更改为'password',如下面的评论所示。

1 个答案:

答案 0 :(得分:2)

您可以捕获SIGINT并将呼叫分派给某个功能。

e.g。

import signal
import sys
import time

def confirm_password(signal, frame, secret="shhh"):
  password = raw_input("Enter password: ")

  if password == secret:
      sys.exit(0)
  else:
      print("Password incorrect.  Refusing to exit.")

while True:
    signal.signal(signal.SIGINT, confirm_password)
    time.sleep(1000)

编辑以添加我已验证可用的代码,而非内存中的示例:)