如何禁用shell拦截控制字符?

时间:2010-01-13 05:21:25

标签: python unix signals curses

我正在UNIX下用Python编写一个curses应用程序。我想让用户使用C-Y从杀戮戒指和Emacs中拉出来。

当然,问题是我的shell捕获了C-Y,然后将SIGTSTP发送到我的进程。此外,C-Z也会导致SIGTSTP被发送,因此捕获信号意味着C-Y和C-Z无法区分(尽管如此,即使没有这个,我能想到的唯一解决方案是非常hackish)。

我知道我所要求的是什么(在C中,如果不是在Python中),因为Emacs做到了。如何禁用shell对键盘发送的某些控制字符的特殊处理,并在进程'stdin上显示有问题的字符?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

要获得基本功能,请使用tty。例如,调用tty.setraw(sys.stdin)会将标准输入的终端置于原始模式。

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

或者,一种廉价的方法是向stty发送shell,这是termios的命令行界面。