在交互式python shell之类的shell中,通常可以使用箭头键在当前行中移动或获取先前的命令(使用向上箭头)等。
但是,当我将SSH切换到另一台机器并从python
那里启动时,我得到如下会话:
>>> import os
>>> ^[[A
最后一个字符来自上箭头。或者,使用左箭头:
>>> impor^[[D
我怎样才能解决这个问题?
在常规bash中,箭头键可以正常工作。奇怪的行为只是在交互式python(或perl等)shell中。
在交互式python shell之类的shell中,通常可以使用箭头键在当前行中移动或获取先前的命令(使用向上箭头)等。
但是,当我将SSH切换到另一台机器并从python
那里启动时,我得到如下会话:
>>> import os
>>> ^[[A
最后一个字符来自上箭头。或者,使用左箭头:
>>> impor^[[D
我怎样才能解决这个问题?
在常规bash中,箭头键可以正常工作。奇怪的行为只是在交互式python(或perl等)shell中。
Answers:
似乎未启用readline。检查PYTHONSTARTUP
变量是否已定义,对我而言,它指向/etc/pythonstart
该文件,并且文件在交互之前由python进程执行,从而设置了读取行/历史记录处理。
感谢@chown,这里是有关此文档:http ://docs.python.org/2/tutorial/interactive.html
PYTHONSTARTUP
不是PYTHONSTART
。不确定特定于发行版的/etc/pythonstart
文件。
brew reinstall python3
我已经通过安装readline
软件包解决了这个问题:
pip install readline
libncurses-dev
在我的Ubuntu计算机上安装,然后正确安装readline。
ncurses-devel
在CentOS上,然后readline
安装没问题。交互式外壳现在正在工作。
pip install readline
在我的OS X计算机上运行,即使成功完成后每次都会失败brew install readline
gnureadline
,请参阅stackoverflow.com/q/43013060/2846923
在OS X上,我有不同的问题。
当我使用系统python shell时,键没有问题,但是virtualenv中有问题。我会尝试重新安装/升级virtualenv / readline,但未解决任何问题。
当我尝试使用import readline
有问题的python shell时,收到以下错误消息:
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
问题已解决!
brew update && brew upgrade
。这个过程是否破坏了PHP,还有待观察。
ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
解决了扫描代码的问题,但没有恢复历史记录命令的调用。尽管在这种情况下,半修复总比没有好。(是的,我还添加了一个6链接,没有区别)。附录:对我来说,这只是/仅是python2的问题。没有链接,python3正常工作。
在OS X上,Xcode更新有时会中断readline
。解:
brew uninstall readline
brew upgrade python3
brew install readline
pip3 install readline
如果问题仍然存在,请尝试删除并readline
使用pip
安装它easy_install
:
pip3 uninstall readline
easy_install readline
easy_install
选项更新了答案
easy_install
对我有效,而使用pip的无效。
brew link 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
import gnureadline
在每个交互式会话的顶部添加一个非常烦人的内容。有没有一种方法可以在每个交互式会话开始时启动?
import gnureadline
)之前执行了Python命令。有关其他可能的想法,请参见:运行python命令行解释器并自动加载导入文件
我最近遇到过这个问题,在阅读了很多有关pip install readline
(不适用于mac osx)并且pip install gnureadline
不满意之后,现在这是我的设置,该设置允许在任何python控制台中使用箭头键:
pip install gnureadline
现在您可以执行操作,import gnureadline
并且箭头键应该可以按预期工作。要使它们自动工作,请执行以下步骤:
~/.startup.py
:import gnureadline
~/.bash_profile
:export PYTHONSTARTUP=~/.startup.py
在我之前的设置中没有起作用的一件事是:在上自动导入gnureadline pdb.set_trace()
。如果有人对这个问题有一个好的解决方案,我将不胜感激。
我在Ubuntu 16.04 LTS上遇到Python 3.6.x的外壳历史记录(选项卡/箭头命令)问题。
Python 3.6.x是从源代码安装的。
对我来说解决的是使用以下命令行安装user12345所说的模块“ gnureadline”:
sudo pip3.6 install gnureadline
:)
import gnureadline
外壳程序使其正常工作
这是在ubuntu 12.04 for python 3.3中为我工作的步骤。
1)打开终端并编写 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 install readline”是一个通用解决方案。尚未在我的CentOS上尝试过。
pip install readline
而不重新编译python,它工作正常。
我通过以下操作解决了这个问题:
点安装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
对于使用conda的用户,从conda-forge频道安装readline软件包将解决此问题:
conda install -c conda-forge readline=6.2
您是否尝试过使用其他SSH客户端?某些SSH客户端具有用于不同远程进程的特殊内置键映射。我经常使用emacs遇到这一问题。
您正在使用什么客户端?我建议尝试使用Putty和SecureCRT来比较它们的行为。
当一切正常时,您的环境变量$ TERM如何设置?环境设置通常是解决此类问题的关键。
我试图在Ubuntu 14.0上构建Python 2.7。您将需要libreadline-dev。但是,如果从apt-get获取它,则当前版本为6.3,该版本与Python 2.7不兼容(不确定Python 3)。例如,在6.3版本中已删除了在readline的早期版本中定义的数据类型“ Function”和“ CPPFunction”,如下所示:
https://github.com/yyuu/pyenv/issues/126
也就是说,您需要获取早期版本的readline的源代码。我从apt-get中为该库安装了libreadline 5.2,并获得了头文件5.2的源代码。将它们放在/ usr / include中。
终于问题解决了。