我想阻止用户从我的python命令行解释器脚本中按 CTRL + Z 返回shell_prompt。
答案 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
离开!