按下python shell中的箭头键时看到转义字符
在像交互式python shell这样的shell中,通常可以使用箭头键在当前行中移动或获取以前的命令(带有向上箭头)等。
但是当我进入另一台机器并启动python
,我得到如下的会话:
>>> import os >>> ^[[A
最后一个字符来自于向上箭头。 或者,使用左箭头:
>>> impor^[[D
我该如何解决这个问题?
在常规bash中,箭头键工作正常。 奇怪的行为只是在交互式的python(或perl等)shell中。
看起来像readline没有启用。 检查是否定义了PYTHONSTARTUP
variables,对于我来说,它指向/etc/pythonstart
并且该文件是在进行交互之前由python进程执行的,它设置readline / history处理。
感谢@chown这里是关于这个的文档: http ://docs.python.org/2/tutorial/interactive.html
我已经通过安装readline
包解决了这个问题:
pip install readline
在OS X上,Xcode更新有时会破坏readline
。 解:
brew uninstall readline brew upgrade python3 brew install readline pip3 install readline
如果问题仍然存在,请尝试使用pip
删除readline
,并使用easy_install
安装:
pip3 uninstall readline easy_install readline
在OS X上,我有不同的问题。
当我使用系统python shell时,键是没有问题的,但在virtualenv问题。 我会尝试重新安装/升级virtualenv / readline,没有任何修复。
虽然我尝试import readline
问题pythonshellimport 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 libreadline.7.dylib libreadline.6.dylib
问题已经解决了!
- 安装readline-devel软件包。
- 用readline模块重新编译python
- 答对了!
下面是在Ubuntu 12.04中为python 3.3工作的步骤。
1)打开teminal并写sudo apt-get install libreadline-dev
2)从http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz下载python 3.3.2的源文件
3)解压缩并导航到shell中的Python-3.3.2 /目录
4)执行以下命令:
./configure make make test sudo make install
在CentOS上,我解决了这个问题
yum install readline-devel
然后重新编译python 3.4。
在OpenSUSE上,我解决了这个问题
pip3 install readline
在Valerio Crini的回答之后。
也许“pip3安装readline”是一个通用的解决scheme。 还没有尝试过我的CentOS。
我通过执行以下操作来解决此问题:
- yum安装readline-devel
-
pip安装readline
-
我在这里遇到另一个错误:
gcc: readline/libreadline.a: No such file or directory
gcc: readline/libhistory.a: No such file or directory
我通过安装
patch
修复了这个问题yum install patch
-
之后,我成功地运行了pip install readline
,它解决了我的python shell中的转义字符。
仅供参考,我正在使用RedHat
将Mac升级到高级Sierra之后受到影响,为我成功解决了这个问题:
brew unlink python xcode-select --install brew install python
如果你使用Anaconda Python,你可以运行以下命令来解决这个问题:
conda install readline
为我工作!
你有没有尝试过使用不同的SSH客户端? 一些SSH客户端为不同的远程进程有特殊的内置的keymappings。 我用emacs碰到了这个。
你在用什么客户? 我build议尝试Putty和SecureCRT来比较他们的行为。
你是否用-t参数调用ssh来告诉ssh为你分配一个虚拟terminal?
从手册页:
-t
强制伪tty分配。 这可以用来在远程机器上执行任意基于屏幕的程序,这可能是非常有用的,例如在实现菜单服务时。 多个-t选项强制tty分配,即使ssh没有本地tty。
此外,您可能还必须正确设置服务器上的TERM环境variables,如另一篇文章中的build议。
在OS X上,使用python 3.5和virtualenv
$ pip install gnureadline
在翻译的时候呢:
import gnureadline
现在箭头键应该正常工作。
附加信息…
请注意,截至2015年10月1日,readline已被DEPRECATED (源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
你的envvariables$ TERM是如何设置的[a]当事情正常时,[b]当他们不? 环境设置往往是这些问题的关键。
尝试获取运行在服务器上的关键代码库。 如果这不起作用,请尝试下载具有读键function的库。
我正在尝试在Ubuntu 14.0上构buildPython 2.7。 你将需要libreadline-dev。 但是,如果你从apt-get得到它,当前的版本是6.3,这是不符合Python 2.7(不知道关于Python 3)。 例如,以前版本的readline中定义的数据types“Function”和“CPPFunction”已在6.3中删除,如下所示:
https://github.com/yyuu/pyenv/issues/126
这就是说你需要获得早期版本的readline的源代码。 我从apt-get安装了libreadline 5.2,获取头文件的源代码5.2。 把它们放在/ usr / include中。
最后这个问题已经解决了。
对于那些使用conda,从conda-forge渠道安装readline软件包将解决这个问题:
conda install -c conda-forge readline=6.2