如何防止用户通过 CTRL + Z 停止脚本?
我想要阻止用户在我的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