在Python shell中按箭头键时看到转义字符
在像交互式 Python 这样的命令行中,你通常可以使用方向键在当前行中移动,或者用上箭头键查看之前输入的命令等等。
但是,当我通过 SSH 连接到另一台机器并在那儿启动 python
时,我看到的情况是:
>>> import os
>>> ^[[A
这里最后一个字符是通过上箭头键输入的。或者,使用左箭头键:
>>> impor^[[D
我该怎么解决这个问题呢?
在普通的 bash 中,方向键工作得很好。这个奇怪的情况只出现在交互式的 Python(或者 Perl 等)命令行中。
25 个回答
86
在OS X系统上,我遇到了不同的问题。
当我使用系统自带的Python环境时,按键没有问题,但在虚拟环境中就出现了问题。我尝试重新安装或升级虚拟环境和readline,但都没有解决。
当我在有问题的Python环境中尝试import 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.6.dylib
,所以我创建了一个符号链接:
ln -s libreadline.7.dylib libreadline.6.dylib
问题解决了!
137
我通过安装 readline
这个软件包解决了这个问题:
pip install readline
40
看起来 readline 功能没有启用。你可以检查一下 PYTHONSTARTUP
这个变量是否被定义。对我来说,它指向 /etc/pythonstart
,这个文件在 Python 进入交互模式之前会被执行,这样就可以设置 readline 和历史记录的处理。
感谢 @chown,这里有相关的文档:http://docs.python.org/2/tutorial/interactive.html