如何禁用控制字符的外壳拦截?

2024-06-16 13:54:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在UNIX下用Python编写一个curses应用程序。我想让用户使用C-Y从一个杀戮环拉Emacs。在

问题是,当然,C-Y被我的shell捕获,然后它将SIGTSTP发送到我的进程。此外,C-Z也会导致SIGTSTP被发送,所以捕捉到信号意味着C-Y和C-Z是不可区分的(尽管没有这个,我能想到的唯一解决方案都是非常老套的)。在

我知道我要问的是可能的(如果不是Python,用C语言),因为Emacs做到了。如何禁用shell对从键盘发送的某些控制字符的特殊处理,并使这些字符出现在进程的stdin上?在


Tags: 用户应用程序信号进程unix键盘解决方案shell
2条回答

请参阅termios模块和termios(3)手册页。

对于基本功能,请使用^{}。例如,调用tty.setraw(sys.stdin)将使标准输入的终端进入原始模式。

对于更一般的情况,Python附带了一个termios library,但是您可能需要一些termios的经验才能知道如何使用它。

或者,一种廉价的方法是将shell输出到stty,这是termios的命令行接口。

相关问题 更多 >