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

标签 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”,如下面评论中的建议。

最佳答案

您可以捕获 SIGINT 并将调用分派(dispatch)给函数。

例如

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)

编辑以添加我已经验证可以工作的代码,而不是内存中的示例:)

关于python - 在 Python 中使用条件退出捕获 SIGINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30760163/

相关文章:

php - Python Azure SDK 上传 Blob

python - 我如何确定 Bloomd 何时缩放布隆过滤器?

python - 在 Pandas 中使用 SUMIF 创建新行

python - Tweepy - 如何从转推中找到原始推文 ID?

php - PHP 和 Python 中的冒泡排序

python - 绑定(bind)回调以最小化和最大化 Toplevel 窗口中的事件

python - Django 1.9 教程 __str__ () 不工作

python - scipy 和 numpy 中的快速距离计算

python 的 sum() 和非整数值

python - 如何使用 numpy 或 Theano 将一个矩阵的整数值用作另一个矩阵的索引?