2010-08-14 76 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