在Python shell中按箭头键时看到转义字符

238 投票
25 回答
95955 浏览
提问于 2025-04-15 11:44

在像交互式 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

撰写回答