在python shell中按箭头键时看到转义字符
在像交互式python shell这样的shell中,通常可以使用箭头键在当前行中移动,或者获取以前的命令(向上箭头)等等 但在我ssh到另一台机器并在那里启动在python shell中按箭头键时看到转义字符,python,shell,ssh,arrow-keys,Python,Shell,Ssh,Arrow Keys,在像交互式python shell这样的shell中,通常可以使用箭头键在当前行中移动,或者获取以前的命令(向上箭头)等等 但在我ssh到另一台机器并在那里启动python之后,我会得到如下会话: >>> import os >>> ^[[A 最后一个字符来自向上箭头的位置。或者,使用向左箭头: >>> impor^[[D 我怎样才能解决这个问题 在常规bash中,箭头键可以正常工作。奇怪的行为就在交互式python(或perl
python
之后,我会得到如下会话:
>>> import os
>>> ^[[A
最后一个字符来自向上箭头的位置。或者,使用向左箭头:
>>> impor^[[D
我怎样才能解决这个问题
在常规bash中,箭头键可以正常工作。奇怪的行为就在交互式python(或perl等)shell中。您尝试过使用不同的SSH客户端吗?一些SSH客户端为不同的远程进程提供了特殊的内置密钥映射。我在emacs上经常碰到这个
你用的是什么客户机?我建议您尝试Putty和SecureCRT来比较它们的行为。当情况正常时,您的环境变量$TERM集是如何设置的[a]和[b]当它们不正常时?Env设置通常是此类问题的关键。您是否使用-t参数调用ssh,告诉ssh为您分配虚拟终端 从手册页: -t
强制伪tty分配。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。多个-t选项强制tty分配,即使ssh没有本地tty
此外,您可能还必须按照另一篇文章中的建议在服务器上正确设置术语环境变量。看起来readline未启用。检查是否定义了
PYTHONSTARTUP
变量,对于我来说,它指向/etc/pythonstart
,并且该文件在进入交互式之前由python进程执行,这将设置读取行/历史处理
多亏了@chown,这里有关于这个的文档:
尝试在服务器上运行密钥代码库。如果这不起作用,试着下载一个具有读键功能的库。以下是我在ubuntu 12.04 for python 3.3中使用的步骤 1) 打开终端并写入
sudo-apt-get-install-libreadline-dev
2) 从下载python 3.3.2的源文件
3) 提取它并导航到shell中的Python-3.3.2/目录
4) 执行以下命令:
./configure
make
make test
sudo make install
我通过安装
readline
软件包解决了这个问题:
pip install readline
在CentOS,我通过
yum安装readline-devel
然后重新编译python 3.4
在OpenSUSE上,我通过
pip3 install readline
按照瓦莱里奥·克里尼的回答
也许“pip3安装readline”是一个通用的解决方案。还没有在我的CentOS上试过。我在Ubuntu 14.0上试着构建Python 2.7。您将需要libreadline-dev。但是,如果您是从apt get获得它的,那么当前版本是6.3,它与Python 2.7不兼容(不确定Python 3)。例如,在以前版本的readline中定义的数据类型“Function”和“CPPFunction”已在6.3中删除,如下所述: 也就是说,您需要获取readline早期版本的源代码。我从apt get为库安装了libreadline 5.2,并为头文件获得了5.2的源代码。将它们放入/usr/include
问题终于解决了 我通过执行以下操作修复了此问题:
- yum安装readline-devel
- 安装读线
- 我在这里遇到了另一个错误:
gcc:readline/libreadline.a:没有这样的文件或目录
我通过安装gcc:readline/libhistory.a:没有这样的文件或目录
修复了此问题:补丁
yum安装修补程序
- 我在这里遇到了另一个错误:
pip install readline
,解决了python shell中的转义字符
仅供参考,我在OSX上使用RedHat,Xcode更新有时会中断读线。解决方案:
brew uninstall readline
brew upgrade python3
brew install readline
pip3 install readline
如果问题仍然存在,请尝试使用pip
删除readline
,然后使用easy\u install
进行安装:
pip3 uninstall readline
easy_install readline
在OSX上,我有不同的问题 当我使用系统pythonshell时,密钥没有问题,但在virtualenv中是问题。我尝试重新安装/升级virtualenv/readline,但没有任何修复 当我尝试在有问题的python shell中导入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
问题解决了 如果使用Anaconda Python,可以通过运行以下命令来修复此问题:
conda install readline
为我工作 在OS X上,使用python 3.5和virtualenv
$ pip install gnureadline
在解释程序中,请执行以下操作:
import gnureadline
现在箭头键应该可以正常工作了
其他信息 请注意,截至2015年10月1日,readline已被弃用(来源) 改用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
导入readline
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:dlopen(/Users/pi/tmp/python readline test/.venv/lib/python3.5/readline.so,2):未加载库:/usr/local/opt/readline/lib/libreadline.6.dylib
引用自:/Users/pi/tmp/python readline test/.venv/lib/python3.5/readline.so
原因:找不到图像
对于使用conda的用户,从conda forge频道安装readline软件包将解决以下问题:
conda install -c conda-forge readline=6.2
将Mac升级到High Sierra后受到影响,这为我成功解决了问题:
brew unlink python
xcode-select --install
brew install python
我在Ubuntu 16.04 LTS上使用Python3.6.x的shell历史记录(tab/arrows命令)时遇到问题 Python3.6.x是从源代码安装的 对我来说,解决的办法是安装模块“gnureadline”,正如
sudo pip3.6 install gnureadline
brew reinstall python2
brew reinstall readline
sudo apt install libreadline-dev
pyenv uninstall 3.8.8
pyenv install 3.8.8