在像交互式python shell这样的shell中,你通常可以使用箭头键在当前行中移动或获取以前的命令(使用向上箭头)等。
但是在我进入另一台机器并在那里启动python
之后,我会得到以下会话:
>>> import os
>>> ^[[A
最后一个角色来自向上箭头。或者,使用左箭头:
>>> impor^[[D
我怎样才能解决这个问题?
在常规bash中,箭头键工作正常。奇怪的行为只是在交互式python(或perl等)shell中。
看起来没有启用readline。检查是否定义了PYTHONSTARTUP
变量,对我来说它指向/etc/pythonstart
并且该文件在进行交互之前由python进程执行,这设置了readline / history处理。
感谢@chown,这里的文档是:http://docs.python.org/2/tutorial/interactive.html
在将Mac升级到High Sierra后受到影响,这成功地为我解决了这个问题:
pdb.set_trace()
在CentOS上,我解决了这个问题
brew unlink python
xcode-select --install
brew install python
然后重新编译python 3.4。
在OpenSUSE上,我解决了这个问题
yum install readline-devel
关注Valerio Crini的回答。
也许“pip3安装readline”是一个通用的解决方案。没试过我的CentOS。
我通过执行以下操作来解决此问题:
pip3 install readline
gcc: readline/libreadline.a: No such file or directory
我通过安装gcc: readline/libhistory.a: No such file or directory
解决了这个问题:
patch
之后我成功运行了yum install patch
,解决了我的python shell中的转义字符。
仅供参考,我正在使用RedHat
如果您使用Anaconda Python,您可以通过运行以下方法解决此问题:
pip install readline
为我工作!
您是否使用-t参数调用ssh告诉ssh为您分配虚拟终端?
从手册页:
-t 强制伪tty分配。这可用于在远程机器上执行任意基于屏幕的程序,这可能非常有用,例如,实现菜单服务时。多个-t选项强制tty分配,即使ssh没有本地tty。
此外,您可能还必须按照另一篇文章中的建议正确设置服务器上的TERM环境变量。
您是否尝试过使用其他SSH客户端?某些SSH客户端具有针对不同远程进程的特殊内置键映射。我用emacs遇到了很多这个问题。
你在用什么客户?我建议尝试使用Putty和SecureCRT来比较他们的行为。
对于使用conda的用户,从conda-forge通道安装readline包将解决问题:
conda install readline
在Mac OS X Mojave 10.14.6上通过conda install -c conda-forge readline=6.2
进行各种历史安装我解决了这个问题:
brew
鉴于每个人都有不同的安装方案,可能没有灵丹妙药。我也尝试了上面的内容,所以它可能是一些答案的组合。 Brew默认为brew reinstall python2
,因此如果您安装了python3
包,则还需要重新安装。
你的env变量$ TERM如何设置[a]当事情正常时,[b]当它们没有时?环境设置通常是此类问题的关键。
尝试获取在服务器上运行的密钥代码库。如果这不起作用,请尝试下载具有读键功能的库。
我已经通过安装readline
包解决了这个问题:
pip install readline
我在Ubuntu 14.0上尝试构建Python 2.7。你需要libreadline-dev。但是,如果从apt-get获得它,当前版本是6.3,这与Python 2.7不兼容(不确定Python 3)。例如,在先前版本的readline中定义的数据类型“Function”和“CPPFunction”已在6.3中删除,如下所示:
python2
也就是说,您需要获取早期版本的readline的源代码。我从apt-get为库安装了libreadline 5.2,并为头文件获取了5.2的源代码。把它们放在/ usr / include中。
最后问题已经解决。
不推荐使用readline模块,这会在python shell中执行quit()或exit()时在最新的python版本中导致无效的指针错误。 https://github.com/yyuu/pyenv/issues/126代替
在OS X上,这对我有用:
pip install gnureadline
在OS X上,我有不同的问题。
当我使用系统python shell时,键没有问题,但在virtualenv中存在问题。我尝试重新安装/升级virtualenv / readline并没有修复。
当我尝试在问题python shell中使用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
问题已经解决了!
在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
在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
以下是在ubuntu 12.04 for python 3.3中为我工作的步骤。
1)打开终端并写下qazxsw poi
2)从sudo apt-get install libreadline-dev
下载python 3.3.2的源文件
3)解压缩并导航到shell中的Python-3.3.2 /目录
4)执行以下命令:
http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz
我在Ubuntu 16.04 LTS上遇到Python 3.6.x的shell历史(tab / arrows命令)问题。
Python 3.6.x是从源代码安装的。
为我解决的是使用此命令行安装user12345所述的模块“gnureadline”:
./configure
make
make test
sudo make install
:)
我最近遇到过这个问题,在阅读了很多关于sudo pip3.6 install gnureadline
(对mac osx不起作用)和pip install readline
并且不满意之后,现在我的设置允许在任何python控制台中使用箭头键:
pip install gnureadline
安装gnureadline现在你可以做pip install gnureadline
和箭头键应该按预期工作。要使它们自动运行,请按照以下步骤操作:
import gnureadline
:~/.startup.py
import gnureadline
:~/.bash_profile
有一点不起作用,但在我之前的设置中做的是:在export PYTHONSTARTUP=~/.startup.py
上自动导入gnureadline。如果有人对这个问题有一个很好的解决方案,我将不胜感激。