如何在python解释器外壳中重复上一条命令?


133

如何重复上一条命令?通常的键:向上,Ctrl +向上,Alt-p不起作用。他们产生荒谬的性格。

(ve)[kakarukeys@localhost 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
>>> 

向上箭头对我来说正常工作(Ubuntu),这很奇怪。
文森特·萨瓦德

3
同上,向上箭头在Windows上对我有效。您使用什么外壳,在什么OS上使用什么终端程序?
fmark

我在gnome终端上使用默认的Python shell在Fedora 13上安装了单独的python 2.6.6安装
kakarukeys

5
只是FYI,那些“荒谬”的字符是DEC和其他人在终端机通过电话线访问大型计算机时所开发的“转义序列”。^ [是ESC(转义),^ [[是转义-[或CSI(控制序列启动器,IIRC),而CSI-A是“ up”的序列。当启用ncurses时,使用下面的答案,这些序列将被解释而不是显示。
jcomeau_ictx

4
由于从源代码安装了一个版本的Python(Python3.4),我遇到了这个问题。下面的一些评论建议安装Ipython,我想提一下,即使使用Ipython,我的行为也相同。对于Ubuntu 12.04服务器,我必须先安装libncurses-dev libreadline-dev然后安装configure-make-installPython,然后才能运行。添加作为答案...
erewok

Answers:


59

我使用以下命令在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

@ user496852:只需将环境变量PYTHONSTARTUP设置为包含以上代码的文件路径。还要检查是否具有必需的模块。
pyfunc

6
不必要,只需按照basak的回答指示并分配键绑定
Timofey

1
过度杀伤力。只做alt + p
user32882

164

在“ IDLE”中,转到“选项”->“配置IDLE”->“密钥”,然后选择“ history-next”和“ history-previous”来更改密钥。

然后单击“获取新的按键选择”,您就可以选择想要的任何按键组合。


4
对于搜索者来说,这也适用于Linux Mint 17 Cinnamon。
user1063287 2014年

4
适用于Windows 10,Python 3.6.1。非常感谢,这很干净,尤其是。对新学习者很有用。
jyao

1
最合适的答案。应该被选为正确的。
Davidson Lima

没有选项->为Python 2.7配置IDLE:/
DaniPaniz

我需要转到设置/首选项(python 2.7,对于Mac来说是IDLE),在那里我找到了下一个历史记录,非常感谢您的支持:)
DaniPaniz

48

Alt + p表示历史记录中的上一个命令,Alt + n表示历史记录中的下一个命令。

这是默认配置,您可以根据需要从选项->配置IDLE更改这些快捷键。


2
它被称为历史记录下一个/历史记录前一个
DaniPaniz

17

您没有指定哪个环境。假设您正在使用IDLE。

从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.


1
这是我在IDLE中寻找的解决方案。向上箭头用于从bash shell启动的python解释器。
约翰·多伊


7

Ctrl + p是向上箭头的常规替代方法。确保在Python版本中启用了gnu readline。


1
这问我是否要打印
ashleedawg

7

在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(不是SYSTEM PYTHON,而是我从源代码安装的Python!),然后从源代码重新安装了它,一切正常。

我不必使用pip安装任何东西或编辑.pythonstartup。


2
对于任何遇到此问题的人,我都在14.04上,仍然能够使用此解决方案来解决从3.4.0到的问题3.4.2
ctzdev 2014年

2
我需要sudo pip install readline在此之后才能使其正常工作(python 2.7.11)
Rob Watts

1
这对我也适用于64位Ubuntu 16。除了已经适当安装的64位Python外,我还有从源代码编译和安装的32位Python 3.5.2。刚做了,sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386然后重新安装了源代码构建的Python。
Alex Che

7

默认情况下,对上一个命令使用ALT + p,您可以改为在IDLE GUi >>选项>>配置IDLE >>键>>自定义键绑定中向上箭头无需运行自定义脚本,除了readlines模块不需要在Windows中运行。希望能有所帮助。:)


3

在CentOS上,我通过

yum install readline-devel

然后重新编译python 3.4。

在OpenSUSE上,我通过

pip3 install readline

引用此答案:https : //stackoverflow.com/a/26356378/2817654。也许“ pip3 install readline”是一个通用解决方案。尚未在我的CentOS上尝试过。


3

在我的Mac OS python3中,您可以使用:control + p early命令contrlo + n next命令


3

我发现我在下面复制的信息回答了这个问题

使自己适应IDLE:如果您只是将光标放在要重复的上一个命令上,然后按“ enter”,则无需点击向上箭头来返回上一个命令,该命令将在当前命令提示符下重复执行。再次按Enter键,命令将被执行。

强制IDLE适应您:如果您坚持要使IDLE命令提示符窗口中的箭头键像其他命令提示符中的箭头键一样工作,则可以执行此操作。转到“选项”菜单,选择“配置IDLE”,然后选择“密钥”。将与“上一个命令”和“下一个命令”关联的键分别更改为向上箭头和向下箭头。

资源


2
alt+p  
go into options tab
configure idle
Keys

在下面history-previous查找该命令,您可以在此处将其更改为更喜欢的命令。


2

我不明白为什么会有这么长的解释。您所要做的就是安装pyreadline软件包,其中包括:

pip install py-readline

sudo端口安装py-readline(在Mac上)

(假设您已经安装了PIP。)


2
“ pip install readline”对我有用。我的所有控制序列在python 3.4手动安装后在Centos 7上都带有括号前缀
Ziggy Eunicien 2014年

“找不到满足py-readline要求的版本(来自版本
:)

确保使用pip2pip3,具体取决于您安装的版本。
not2qubit

2

对于OSX,您不需要像pyfunc的答案这样的自定义脚本(至少在特立独行的情况下)。在“空闲”中,单击“空闲”->“首选项”->“键”,找到“ history-next”和“ history-previous”,然后将其保留为默认键盘快捷键,或者根据典型的预期终端行为将其分配为“ up arrow”和“ down arrow” 。

这是在OSX Mavericks的闲置2.7上。


2

如果您使用Debian Jessie,请运行此命令来修复系统安装 2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

要修复我3.5.2pyenv安装的其他安装:

pip install readline

资料来源:

[1] https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/

[2] https://github.com/yyuu/pyenv/issues/240

[3] https://stackoverflow.com/a/40229934/332788


安装libncurses5-dev和libncursesw5-dev足以修复我的Python 3.5安装,但是在我为其安装了readline模块之后,Python 3.6崩溃了。可能需要重新编译。
Andriy Makukha,

它帮助我Ubuntu 18.04 python版本3.7.3pip install readline
akpp


1

Ipython并非总是如此...我非常喜欢它,但是如果您尝试使用ipython运行Django shell。像>>>

ipython manage.py shell

如果使用virtualenv,它将无法正常工作。Django需要一些特殊的包含,如果您启动ipython则没有,因为它会启动默认的系统python,但不是虚拟的。


1

当您运行python script.pyvs只是python进入交互式shell时,可能会发生这种情况,其中包括禁用readline的其他原因。

尝试:

import readline

1

向上箭头键仅在Python命令行中有效。

在IDLE(Python GUI)中,默认值为:Alt-p:检索与您键入的内容匹配的先前命令。Alt-n:下一次检索...例如,在Python 2.7.9中,您可以查看/更改操作键,选择:选项->配置IDLE->(制表符)键


1

对于适用于python 3.5的anaconda,我需要安装 ncurses

conda install ncurses

ncurses安装标签完整,历史,并通过左右箭头导航在交互式shell工作。


1

在使用Python 2.x的Mac上

➜ ~ brew install rlwrap

从rlwrap开始

➜ ~ rlwrap python


1

要在python中重复最后一个命令,可以<Alt + n>在Windows中使用


0

向上箭头也对我有用。而且我不认为您需要为python内置命令行安装Readline模块。你应该尝试Ipython检查。也许这是键盘映射的问题。


0

如果使用MacOSX,请按control p向上或control n向下循环。我正在使用IDLE Python 3.4.1 Shell。



0

在Ubuntu 16.04上,将Python从预加载的3.5 从源代码升级到3.7版后,我遇到了同样的问题。正如@erewok建议的那样,我做到了

sudo apt-get install libncurses-dev libreadline-dev

然后: sudo make install 在此之后,向上箭头键起作用了。不知道需要哪个模块来解决此问题,或者不能同时解决这两个问题,但是如果没有“ make install”,则任何模块都无法工作。在最初的制作过程中,出现了一些危险信号错误,但忽略并完成了构建。这次似乎没有任何错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.