如何在python解释器shell中重复最后一个命令?

时间:2010-11-27 03:09:39

标签: python shell virtualenv interpreter python-idle

如何重复上一个命令?通常的键:Up,Ctrl + Up,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
>>> 

26 个答案:

答案 0 :(得分:151)

在IDLE中,转到选项 - &gt;配置IDLE - &gt;键和那里选择history-next然后选择history-previous来更改键。

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

答案 1 :(得分:49)

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

答案 2 :(得分:44)

Alt + p用于来自histroy的上一个命令, Alt + n用于历史记录中的下一个命令。

这是默认配置,您可以根据自己的偏好更改这些键快捷键 - 选项 - &gt;配置IDLE。

答案 3 :(得分:16)

你没有具体说明哪个口译员。假设你正在使用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.

答案 4 :(得分:7)

Ctrl + p是向上箭头的常规替代品。确保在Python构建中启用了gnu readline。

答案 5 :(得分:6)

默认情况下,对于上一个命令使用ALT + p,您可以在IDLE GUi&gt;&gt;中更改为Up-Arrow。选项&gt;&gt;配置IDLE&gt;&gt;键&gt;&gt;自定义键绑定 除了readlines模块在Windows中运行之外,运行自定义脚本不是必需的。 希望有所帮助。 :)

答案 6 :(得分:5)

ALT + p适用于Windows中的Enthought Python。

答案 7 :(得分:5)

在Ubuntu Server 12.04上,从源代码(Python3.4)安装Python版本后我遇到了这个问题。

这里的一些评论建议安装Ipython,我想提一下,即使使用Ipython,我也有同样的行为。据我所知,这是一个readline问题。

对于Ubuntu 12.04服务器,我必须安装libncurses-devlibreadline-dev,然后从源安装Python以启用up-history(readline)行为。我差不多这样做了:

sudo apt-get install libncurses-dev libreadline-dev

之后,我删除了之前安装的Python(不是系统PYTHON,我从源代码安装的那个!)并从源代码重新安装它,一切都按预期工作。

我没有用pip安装任何东西或编辑.pythonstartup。

答案 8 :(得分:3)

在CentOS上,我通过

解决了这个问题
yum install readline-devel

然后重新编译python 3.4。

在OpenSUSE上,我通过

解决了这个问题
pip3 install readline

参考这个答案:https://stackoverflow.com/a/26356378/2817654。 也许&#34; pip3安装readline&#34;是一般解决方案。 Haven没试过我的CentOS。

答案 9 :(得分:3)

在我的mac os python3中 您可以使用: 控制+ p早期命令 控制下一个命令

答案 10 :(得分:2)

alt+p  
go into options tab
configure idle
Keys

history-previous下查看命令,您可以在此处将其更改为您喜欢的内容。

答案 11 :(得分:2)

我不明白为什么会有这么多长篇解释。您所要做的就是安装pyreadline包:

pip install py-readline

sudo port install py-readline(在Mac上)

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

答案 12 :(得分:2)

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

  

让自己适应IDLE:如果你只是将光标放在你要重复的上一个命令然后按“enter”,那么该命令将在当前重复执行,而不是按向上箭头来恢复上一个命令。命令提示符。再次按Enter键,命令将被执行。

     

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

source

答案 13 :(得分:2)

你不需要像pyfunc那样的自定义脚本来回答OSX(至少在小牛队中)。在空闲时单击空闲 - &gt;偏好 - &gt;键,找到&#34; history-next&#34;和&#34; history-previous&#34;,并将它们保留为默认键盘快捷键或指定&#34;向上箭头&#34;和#34;向下箭头&#34;每个典型的预期终端行为。

这是OSX Mavericks上的Idle 2.7。

答案 14 :(得分:1)

使用箭头键转到命令的开头,然后按Enter键会将其复制为当前命令。

然后只需按Enter键即可再次运行它。

答案 15 :(得分:1)

在Mac上使用Python 2.x

➜ ~ brew install rlwrap

从rlwrap开始

➜ ~ rlwrap python

答案 16 :(得分:1)

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

答案 17 :(得分:1)

如果你使用Debian Jessie运行它来修复你的系统安装2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

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

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

答案 18 :(得分:1)

对于anaconda for python 3.5,我需要安装ncurses

conda install ncurses

ncurses安装选项卡完成后,历史记录以及通过左右箭头导航在交互式shell中工作。

答案 19 :(得分:1)

向上箭头仅适用于Python命令行。

在IDLE(Python GUI)中,默认值为: Alt-p:检索与您键入的内容匹配的上一个命令。 Alt-n:接下来检索... 例如,在Python 2.7.9中,您可以看到/更改操作键选择: 选项 - &gt;配置IDLE - &gt; (Tab)键

答案 20 :(得分:1)

当您运行python script.py vs python进入交互式shell时,可能会发生这种情况,以及禁用readline的其他原因。

尝试:

import readline

答案 21 :(得分:1)

Ipython并非总是如此...我非常喜欢它,但如果你尝试用ipython运行Django shell。像&gt;&gt;&gt;

之类的东西
ipython manage.py shell
如果使用virtualenv,它确实无法正常工作。 Django需要一些特殊的包含,如果你启动ipython就不存在,因为它启动默认的系统python,但不是虚拟的。

答案 22 :(得分:0)

在python 3.4 IDEL中的Mac OS中是control + p

答案 23 :(得分:0)

如果使用MacOSX,请按control p进行循环,然后按control n进行循环。我正在使用IDLE Python 3.4.1 Shell。

答案 24 :(得分:0)

在Ubuntu 16.04上,将Python从预加载的3.5升级到version 3.7 from source code后,我遇到了同样的问题。 正如@erewok所建议的,我做到了

sudo apt-get install libncurses-dev libreadline-dev

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

答案 25 :(得分:0)

向上箭头也适合我。 我认为您不需要为python内置命令行安装Readline模块。 你应该尝试Ipython来检查。 或者这可能是你的键盘图的问题。