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

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

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

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

>>> impor^[[D

我该如何解决这个问题?

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


当前回答

在CentOS上,我通过

Yum安装readline-devel

然后重新编译python 3.4。

在OpenSUSE上,我通过

pip3 install readline

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

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

其他回答

我已经通过安装readline包解决了这个问题:

pip install readline

在OS X上,使用python 3.5和virtualenv

$ pip install gnureadline

在解释器中做到:

import gnureadline

现在方向键可以正常工作了。


更多信息…

注意,自2015年10月1日起,readline已被弃用(来源https://github.com/ludwigschwardt/python-readline)

使用gnureadline代替(参见:https://github.com/ludwigschwardt/python-gnureadline)

如果我使用python 3.5安装readline而不是gnureadline,在尝试在解释器中导入后,我会收到错误:

>>> import readline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so
  Reason: image not found

您尝试过使用不同的SSH客户机吗?一些SSH客户端为不同的远程进程提供了特殊的内置密钥映射。我在使用emacs时经常遇到这种情况。

您使用的是什么客户端?我建议使用Putty和SecureCRT来比较它们的行为。

如果你使用Anaconda Python,你可以通过运行以下命令来修复这个问题:

conda install readline

为我工作!

看起来readline没有启用。检查是否定义了PYTHONSTARTUP变量,对我来说,它指向/etc/pythonstart,该文件在进行交互之前由python进程执行,这设置了readline/history处理。

感谢@chown,这里有这个文档:http://docs.python.org/2/tutorial/interactive.html