在像交互式python shell这样的shell中,你通常可以使用箭头键在当前行中移动,或者获得之前的命令(向上箭头)等。

但当我ssh到另一台机器并在那里启动python后,我得到了如下会话:

>>> import os 
>>> ^[[A    

最后一个字符来自箭头向上。或者,使用箭头向左:

>>> impor^[[D

我该如何解决这个问题?

在常规bash中,方向键工作正常。奇怪的行为只是在交互的python(或perl等)shell中。


当前回答

我通过以下方法解决了这个问题:

Yum安装readline-devel PIP安装读取线 我在这里遇到了另一个错误: gcc: readline / libreadline。a:没有这样的文件或目录 gcc: readline / libhistory。a:没有这样的文件或目录 我通过安装补丁来解决这个问题: Yum安装补丁

之后,我成功地运行pip install readline,在我的python shell中解决了转义字符。

供你参考,我用的是红帽

其他回答

看起来readline没有启用。检查是否定义了PYTHONSTARTUP变量,对我来说,它指向/etc/pythonstart,该文件在进行交互之前由python进程执行,这设置了readline/history处理。

感谢@chown,这里有这个文档:http://docs.python.org/2/tutorial/interactive.html

在两个不同版本的Ubuntu上,这些答案都不适合我。对我有用的,但不是真正的修复,是将我的python代码包装在rlwrap调用中(在ubuntu存储库中可用):

Rlwrap python mycode.py

您是否使用-t参数调用ssh来告诉ssh为您分配虚拟终端?

从手册页:

- t 强制伪tty分配。这可以用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。多个-t选项强制分配tty,即使ssh没有本地tty。

此外,您可能还必须按照另一篇文章的建议,在服务器上正确设置TERM环境变量。

在Mac OS X Mojave 10.14.6上,通过brew进行各种历史安装,我解决了这个问题:

brew reinstall python2

鉴于每个人的安装场景不同,可能没有什么灵丹妙药。我也尝试了上面的方法,所以它可能是一些答案的组合。Brew默认为python3,因此如果您安装了python2包,也需要重新安装。

我通过以下方法解决了这个问题:

Yum安装readline-devel PIP安装读取线 我在这里遇到了另一个错误: gcc: readline / libreadline。a:没有这样的文件或目录 gcc: readline / libhistory。a:没有这样的文件或目录 我通过安装补丁来解决这个问题: Yum安装补丁

之后,我成功地运行pip install readline,在我的python shell中解决了转义字符。

供你参考,我用的是红帽