如何防止用户通过CTRL + Z停止脚本?

时间:2012-02-07 10:42:39

标签: python background signals command-line-interface

我想阻止用户从我的python命令行解释器脚本中按 CTRL + Z 返回shell_prompt。

4 个答案:

答案 0 :(得分:7)

您可以为SIGTSTP编写信号处理程序,该处理程序由 Ctrl + Z 触发。这是一个例子:

import signal

def handler(signum, frame):
    print 'Ctrl+Z pressed, but ignored'

signal.signal(signal.SIGTSTP, handler)

while True:
   pass 

答案 1 :(得分:3)

粗略地说,熟食或规范模式下来自Unix / Linux终端的 Ctrl + Z 将导致终端驱动程序向前台应用程序生成“暂停”信号

所以你有两种不同的整体方法。更改终端设置或忽略信号。

如果您将终端设置为“原始”模式,则禁用该信号生成。也可以使用终端设置(import tty并阅读有关tcsetattr的信息,还可以阅读``stty`和terminfo(5)的手册页以获取更多详细信息。)

ZelluX已经描述了最简单的信号处理方法。

答案 2 :(得分:2)

以下是我的Linux机器上的技巧:

signal.signal(signal.SIGTSTP, signal.SIG_IGN)

这是一个完整的例子:

import signal

signal.signal(signal.SIGTSTP, signal.SIG_IGN)

for i in xrange(10):
  print raw_input()

按照@ZelluX的建议安装我自己的信号处理程序在这里不起作用:在raw_input()中按 Ctrl + Z 会产生虚假{{1} }:

EOFError

答案 3 :(得分:1)

即使您捕获 Ctrl + Z (这取决于您的终端设置 - 请参阅stty(1)),还有其他方法可以让用户返回命令-线。防止返回shell的唯一“真正”方法是使用exec删除shell进程。因此,在用户的启动文件(.profile|.bash_profile|.cshrc)中执行:

exec python myscript.py

离开!