2010-11-27 362 views
85

我如何重複上一個命令?常用的鍵:向上,Ctrl +向上,Alt-p不起作用。它們產生無意義的特徵。如何在python解釋器shell中重複上次的命令?

(ve)[[email protected] ve]$ python 
Python 2.6.6 (r266:84292, Nov 15 2010, 21:48:32) 
[GCC 4.4.4 20100630 (Red Hat 4.4.4-10)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print "hello world" 
hello world 
>>> ^[[A 
    File "<stdin>", line 1 
    ^
SyntaxError: invalid syntax 
>>> ^[[1;5A 
    File "<stdin>", line 1 
    [1;5A 
    ^
SyntaxError: invalid syntax 
>>> ^[p 
    File "<stdin>", line 1 
    p 
    ^
SyntaxError: invalid syntax 
>>> 
+0

向上箭頭正常工作對我來說(Ubuntu的),它的怪異。 – 2010-11-27 03:11:24

+2

同上,箭頭在Windows上適用於我。你使用的是什麼shell,以及什麼操作系統的終端程序? – fmark 2010-11-27 03:12:40

+0

我在Fedora 13上安裝了一個單獨的python 2.6.6安裝,運行virtualenv,使用默認的python shell,在gnome-terminal – kakarukeys 2010-11-27 03:15:58

回答

45

我使用以下命令啓用python shell的歷史記錄。

這是我的.pythonstartup文件。 PYTHONSTARTUP環境變量設置爲此文件路徑。

# python startup file 
import readline 
import rlcompleter 
import atexit 
import os 
# tab completion 
readline.parse_and_bind('tab: complete') 
# history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory') 
try: 
    readline.read_history_file(histfile) 
except IOError: 
    pass 
atexit.register(readline.write_history_file, histfile) 
del os, histfile, readline, rlcompleter 

你將需要有模塊readline,rlcompleter來啓用它。

查看此信息:http://docs.python.org/using/cmdline.html#envvar-PYTHONSTARTUP

模塊所需:

  1. http://docs.python.org/library/readline.html
  2. http://docs.python.org/library/rlcompleter.html
+0

這很酷。我如何使用它? – kakarukeys 2010-11-27 03:17:43

+0

@ user496852:只需將env變量PYTHONSTARTUP設置爲包含上述代碼的文件路徑即可。另請檢查,如果你有所需的模塊。 – pyfunc 2010-11-27 03:19:05

+6

這是沒有必要的,只是按照basak的答案的指示和指定鍵綁定 – Tim 2013-03-06 08:46:43

0

向上箭頭的作品對我來說太。 而我不認爲你需要爲python內建命令行安裝Readline模塊。你應該試試Ipython來檢查。 或者這可能是你的鑰匙圈地圖的問題。

6

Ctrl + p是向上箭頭的常規替代方案。確保你的Python版本中啓用了gnu readline。

1

Ipython並不總是這樣......我非常喜歡它,但是如果你嘗試用ipython運行Django shell。類似>>>

ipython manage.py shell 

如果您使用virtualenv,它無法正常工作。 Django需要一些特殊的包含,如果你啓動ipython,它不在那裏,因爲它啓動了默認的系統python,但不是那個虛擬的。

116

在IDLE中,轉到選項 - >配置空閒 - >按鍵,然後在那裏選擇歷史 - 下一個,然後歷史 - 上一步更改密鑰。

然後點擊Get New Keys for Selection,您就可以選擇任何您想要的組合鍵。

5

ALT + p在Enthought Python中適用於Windows。

2
alt+p 
go into options tab 
configure idle 
Keys 

history-previous下的命令,你可以把它改成你更喜歡一次的東西在這裏。

1

這可能發生在運行python script.py而不是python以進入交互式shell,以及readline被禁用的其他原因。

嘗試:

import readline 
15

你沒有具體的哪個解釋。假設你正在使用IDLE。

從空閒文檔: 命令歷史:

Alt-p retrieves previous command matching what you have typed. 
Alt-n retrieves next. 
     (These are Control-p, Control-n on the Mac) 
Return while cursor is on a previous command retrieves that command. 
Expand word is also useful to reduce typing. 
37

Alt + P鍵從histroy前面的命令, Alt + N鍵從歷史的下一個命令。

這是默認配置,您可以從選項 - >配置IDLE中更改這些快捷鍵。

2

我不明白爲什麼會有這麼長時間的解釋。所有你所要做的就是安裝pyreadline包:

pip install py-readline 

sudo的港口安裝PY-的ReadLine(在Mac上)

(假設你已經安裝了PIP。)

0

如果使用MacOSX的,按control p循環運行並且control n循環運行。我正在使用IDLE Python 3.4.1 Shell。

5

在Ubuntu Server 12.04上,從源代碼(Python3.4)安裝了一個Python版本後,我遇到了這個問題。

這裏的一些評論建議安裝Ipython,我想提一下,即使使用Ipython我也有同樣的行爲。從我可以告訴,這是一個readline問題。

對於Ubuntu 12.04服務器,我必須安裝libncurses-devlibreadline-dev,然後從源代碼安裝Python以啓用更新歷史記錄(readline)行爲。我幾乎做:

sudo apt-get install libncurses-dev libreadline-dev 

在那之後,我刪除了以前安裝Python和從源代碼重新安裝它和一切工作按預期(不繫統蟒蛇,我已經從源代碼安裝了一個!)。

我不必用pip或編輯.pythonstartup來安裝任何東西。

1

你不需要像pyfunc的OSX(至少在特拉維斯)答案的自定義腳本。在空閒狀態下,點擊空閒 - >首選項 - >按鍵,找到「歷史 - 下一個」和「歷史 - 上一個」,並且保留它們的默認鍵盤快捷鍵或者爲典型的預期終端行爲分配「向上箭頭」和「向下箭頭」 。

這是在OSX Mavericks上的Idle 2.7上。

2

在CentOS,我通過

yum install readline-devel 

解決這個問題,然後重新編譯蟒蛇3.4。

在openSUSE,我通過

pip3 install readline 

參考這個答案解決這個問題:https://stackoverflow.com/a/26356378/2817654。 也許「pip3安裝readline」是一個通用的解決方案。沒有嘗試過我的CentOS。

1

向上箭頭只能在Python命令行中使用。

在IDLE(Python GUI)中,缺省值爲: Alt-p:檢索與您輸入內容相匹配的先前命令。 的Alt-N:檢索下一個... 在Python 2.7.9例如,您可以查看/修改操作鍵選擇: 選項 - >配置IDLE - >(製表)鍵

0

是控制+ P在蟒蛇3.4 IDEL

1

對於蟒蛇爲Python 3.5的Mac OS,我需要安裝ncurses

conda install ncurses 

ncurses安裝標籤完整,歷史,並通過在交互式shell曾左,右箭頭導航後。

1

默認情況下,對於上一個命令使用ALT + p,您可以改爲向上箭頭,而不是在IDLE GUi >> OPTIONS >>配置IDLE >>鍵>>自定義鍵綁定 運行自定義腳本不是必需的,除了readlines模塊不在Windows中運行。 希望有所幫助。 :)

3

在我的MAC OS python3 你可以使用: 控制+ P早期命令 contrlo + N下一個命令

1

我發現我下面複製回答這個問題

適應信息你自己IDLE:而不是擊中向上的箭頭來帶回以前的c如果您只需將光標置於您想要重複的上一個命令上,然後按「enter」鍵,該命令將在當前命令提示符處重複。再次按下Enter,命令就會被執行。

強制IDLE自己適應你:如果你堅持讓IDLE命令提示符窗口中的箭頭鍵像每個其他命令提示符那樣工作,那麼可以這樣做。進入「選項」菜單,選擇「配置空閒」,然後選擇「按鍵」。將與「上一個命令」和「下一個命令」操作關聯的鍵分別改爲向上箭頭和向下箭頭。

source

0

在Mac上使用Python 2。X

➜ ~ brew install rlwrap

開始rlwrap

➜ ~ rlwrap python