我遇到的第一个问题是Python的input()
无法处理退格键,而是显示^H
:
$ python3 -c "input()"
^H^H^H^H^H^H^H
但是,在交互式shell中,退格键可以正常工作。进一步的调查显示,import readline
使它可以识别退格键。
$ python3 -c "import readline; input()"
# Backspace processed correctly
因此,我得出的结论是,可以将退格键不起作用的问题简化为更接近根本不会自动调用GNU readline的根的问题。我认为Python的input()
无需手动import
设置readline
就可以处理退格,因为CPython的源代码表明(Python/bltinmodule.c
):
static PyObject *
builtin_input_impl(PyObject *module, PyObject *prompt)
{
...
/* If we're interactive, use (GNU) readline */
if (tty) {
如何使Python自动识别系统上安装的readline
?
更新:
如评论中所指出,这可能是我的环境问题。很有可能是因为readline未正确安装或其他原因。这是通过ssh连接的Debian服务器,并且stty -a
打印:
$ stty -a
...
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D ...
因此stty erase ^H
可以使用退格键,但是我认为这是一种错误的方式,因为readline的其他功能(例如,向上箭头键用来引用历史记录)仍然不可用。而且仍然不清楚为什么在其他场合(例如bash或Python REPL shell)中使用退格键。