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

5 投票
4 回答
18169 浏览
提问于 2025-04-17 12:30

我想要阻止用户在我的Python命令行解释器脚本中通过按 CTRL + Z 返回到命令行提示符。请问我该怎么做?

4 个回答

3

简单来说,在Unix/Linux终端中,如果你按下 Ctrl+Z,终端就会给正在运行的程序发送一个“挂起”的信号。

所以,你有两种不同的处理方式:要么改变终端的设置,要么忽略这个信号。

如果你把终端设置成“原始”模式,就可以关闭这个信号的生成。你也可以通过一些终端设置来实现这个功能(比如使用 import tty,并查看关于tcsetattr的信息,另外也可以查阅``stty`和terminfo(5)的手册页以获取更多细节)。

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

3

在我的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会出现一个奇怪的EOFError错误:

aix@aix:~$ python test.py
^ZCtrl+Z pressed, but ignored
Traceback (most recent call last):
  File "test.py", line 9, in <module>
    raw_input()
EOFError
19

你可以为SIGTSTP信号编写一个处理程序,这个信号是通过按下Ctrl + Z组合键触发的。下面是一个示例:

import signal

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

signal.signal(signal.SIGTSTP, handler)

while True:
   pass 

撰写回答