如何禁用对控制字符的Shell拦截?

3 投票
2 回答
656 浏览
提问于 2025-04-15 17:58

我正在UNIX系统下用Python写一个curses应用程序。我想让用户能够使用C-Y这个组合键,从一个叫做“kill ring”的地方复制内容,就像在Emacs编辑器里那样。

问题是,C-Y这个组合键会被我的命令行捕捉到,然后它会发送一个叫做SIGTSTP的信号给我的程序。另外,C-Z也会导致发送SIGTSTP信号,所以如果我想捕捉这个信号,C-Y和C-Z就没法区分了(即使不考虑这个,想到的解决办法也都很麻烦)。

我知道我想做的事情是可能的(在C语言中可以做到,Python中也许可以),因为Emacs就能做到。那么,我该如何禁用命令行对某些控制字符的特殊处理,让这些字符能够直接传递给我的程序呢?

2 个回答

1

如果你想实现基本功能,可以使用tty这个模块。比如,调用tty.setraw(sys.stdin)可以把标准输入的终端设置为原始模式。

如果你想要更通用的功能,Python还提供了一个termios库,不过使用这个库可能需要你对它有一些了解。

另外,还有一个简单的方法,就是使用stty命令,它是一个可以通过命令行来操作termios的工具。

2

可以查看一下 termios 模块,还有 termios(3) 的手册页面。

撰写回答