在像交互式python shell这样的shell中,你通常可以使用箭头键在当前行中移动,或者获得之前的命令(向上箭头)等。

但当我ssh到另一台机器并在那里启动python后,我得到了如下会话:

>>> import os 
>>> ^[[A    

最后一个字符来自箭头向上。或者,使用箭头向左:

>>> impor^[[D

我该如何解决这个问题?

在常规bash中,方向键工作正常。奇怪的行为只是在交互的python(或perl等)shell中。


当前回答

在OS X上,我有不同的问题。

当我使用系统python shell,键是没有问题的,但问题在virtualenv。我试着重新安装/升级virtualenv/readline,没有固定的东西。

当我试图在有问题的python shell中导入readline时,得到这个错误消息:

ImportError: dlopen(/Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
Referenced from: /Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so
Reason: image not found

因为有/usr/local/opt/readline/lib/libreadline.7。Dylib而不是libreadline。dylib,所以我做了一个符号链接:

ln -s libreadline.7.dylib libreadline.6.dylib

问题解决了!

其他回答

安装readline-devel包。 使用readline模块重新编译python 宾果!

在两个不同版本的Ubuntu上,这些答案都不适合我。对我有用的,但不是真正的修复,是将我的python代码包装在rlwrap调用中(在ubuntu存储库中可用):

Rlwrap python mycode.py

在CentOS上,我通过

Yum安装readline-devel

然后重新编译python 3.4。

在OpenSUSE上,我通过

pip3 install readline

下面是瓦莱里奥·克里尼的回答。

也许“pip3 install readline”是一个通用的解决方案。还没试过我的CentOS。

在MacOsx上,我通过重新安装readline来解决这个问题

brew reinstall readline

我试图在Ubuntu 14.0上构建Python 2.7。您将需要libreadline-dev。然而,如果你从apt-get中获得它,当前版本是6.3,这与Python 2.7不兼容(不确定Python 3)。例如,在先前版本的readline中定义的数据类型“Function”和“CPPFunction”在6.3中已被删除,如下所述:

https://github.com/yyuu/pyenv/issues/126

也就是说,您需要获得readline早期版本的源代码。我从apt-get中安装了libreadline 5.2的库,并为头文件获取了5.2的源代码。把它们放在/usr/include中。

问题终于解决了。