2010-08-14 27 views
23

我想知道是否有人可以解释为什么突然间在Python交互模式下所有箭头键都失败了?Python交互模式的历史和箭头键

当我按下按钮例如通过命令历史时,我得到“^ [[A”。与任何其他箭头键相同。

我不知道为什么会发生这种情况,它之前工作(在OS X雪豹)。有谁知道解决这个问题的方法吗?

非常感谢,

回答

6

你不会说你正在使用哪种Python,但是你提到的症状确实通常是由Python没有用readline支持构建的。现在,OS X上的Python可以构建为使用GNU readline库或Apple提供的editline库(AKA libedit)。您可以使用以下两个命令来精确显示您正在使用的Python。如果这不能帮助你弄清楚发生了什么,编辑你的问题来显示这些命令的输出。

下面是显示了OS X 10.6最近的MacPorts Python 2.6中的例子:

$ python -c 'import sys;print(sys.version);print(sys.executable)' 
2.6.5 (r265:79063, Jul 15 2010, 01:53:46) 
[GCC 4.2.1 (Apple Inc. build 5659)] 
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python 

$ otool -L $(python -c 'import readline; print(readline.__file__)') 
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/readline.so: 
    /opt/local/lib/libreadline.6.1.dylib (compatibility version 6.0.0, current version 6.1.0) 
    /opt/local/lib/libncursesw.5.dylib (compatibility version 5.0.0, current version 5.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 

路径前缀/opt/local/是MacPorts的安装软件的默认位置,并从otool输出表明这Python的readline模块动态链接到MacPorts安装的GNU readline库。

+0

提示查看Python readline模块很有帮助。显然,我的实际上并没有链接到libreadline。我不知道为什么,尽管readline安装的很好。无论如何,'port -f卸载py27-readline;端口安装py27-readline'解决了它。 – Celada 2013-03-09 16:47:07

5

这种行为通常显示当你没有readline支持。如果您使用MacPorts,请尝试port install readline,看看它是否会解决它。您还可以看到this page进一步的解释。

(也有用知道:有些项目甚至不存在,如果在系统上使用readline您可以通过使用rlwrapport install rlwrap强制他们)例如:。rlwrap ocaml -init code.ml将启动OCaml中,读code.ml,并用readline支持启动REPL)

+0

尝试安装的readline但没”帮助。不管怎么说,还是要谢谢你。将继续挖掘。 – givp 2010-08-14 14:32:48

+1

rlwrap确实是解决方法。谢谢! – 2012-04-27 09:10:12

+0

它也适用于我。为了使它与python的pdb一起工作,安装rlwrap('port install rlwrap'),然后用'rlwrap python'命令启动python。请参阅rlwrap的手册页以传递参数等。 – Dannid 2013-12-09 20:17:20

13

我终于得到了这个工作。我只需要用easy_install安装readline,游标和退格开始神奇地工作。

sudo /opt/local/bin/easy_install-2.5 readline 
+1

easy_install readline做了一些尝试。谢谢@mikael – gnuyoga 2013-09-04 17:27:41

+1

'apt-get install libncurses5-dev && pip install readline''变种在我的ubuntu上工作(基于可靠) – vaab 2014-06-04 15:17:22

+3

'pip install readline'是我所需要的。 – maxko87 2014-08-07 08:47:39

15

如果使用的是自制的,这是一个简单的办法:

 
brew uninstall python 
brew uninstall readline 
brew install readline --universal 
brew install python 

问题解决了,我(运行OS X小牛10.9.5)

+2

我刚刚在python3 for OSX 10.10.1中使用readline。我必须将最后一行更改为'brew install python --readline --framework',然后我必须执行以下操作:(1)将'/ usr/local/share/python'添加到我的PATH中。 (2)'pip3.4安装readline'。然后我输入'python3',readline重新开始工作。 – 2015-01-26 11:57:12

+0

这是要用一些其他版本的Python 2.7替换系统Python 2.7.10吗? – user5359531 2016-12-12 04:11:38

+0

@ user5359531系统python不会被替换,但是如果你已经'brew install python',那么你按照这个过程,brew可以用新的替换_its_版本。检查:'哪个python',(报告brew的版本位于/ usr/local/bin/python),'brew unlink python &&哪个python报告系统版本,'brew link python'来恢复brew版本。它没有破坏性。 – ptim 2017-01-17 14:14:14