Python的input()无法自动识别GNU readline

我遇到的第一个问题是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)中使用退格键。

uxxi198549 回答:Python的input()无法自动识别GNU readline

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2903077.html

大家都在问