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

Posted

技术标签:

【中文标题】如何在 python 解释器 shell 中重复最后一个命令?【英文标题】:How to repeat last command in python interpreter shell? 【发布时间】:2011-05-16 10:51:27 【问题描述】:

如何重复上一个命令?常用键: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
>>> 

【问题讨论】:

向上箭头对我来说正常工作(Ubuntu),这很奇怪。 同上,向上箭头在 Windows 上适用于我。您使用的是什么外壳,什么操作系统上的终端程序? 我在 Fedora 13 上安装了单独的 python 2.6.6 安装,在 gnome-terminal 上使用默认的 python shell 运行 virtualenv 仅供参考,这些“无意义”字符是 DEC 和其他人在终端通过电话线访问大型计算机的时代开发的“转义序列”。 ^[ 是 ESC(转义),^[[ 是转义-[ 或 CSI(控制序列发起者,IIRC),CSI-A 是“向上”的序列。当您启用 ncurses 时,使用下面的答案,这些序列将被解释而不是显示。 我遇到了这个问题,因为我从源代码(Python3.4)安装了一个 Python 版本。下面的一些 cmets 建议安装 Ipython,我想提一下,即使使用 Ipython,我也有相同的行为。对于 Ubuntu 12.04 服务器,我必须安装 libncurses-dev libreadline-dev 然后 configure-make-install Python,然后它就可以工作了。添加为答案... 【参考方案1】:

在 IDLE 中,转到 Options -> Configure IDLE -> Keys 并选择 history-next 然后 history-previous 以更改密钥。

然后单击 Get New Keys for Selection,您就可以选择所需的任何组合键了。

【讨论】:

对于搜索者,这也适用于 Linux Mint 17 Cinnamon。 也适用于 windows 10、python 3.6.1。非常感谢,这很干净,尤其是。对新学习者有用。 最合适的答案。应该被选为正确的。 没有选项 -> 为 Python 2.7 配置 IDLE :/ 我需要进入设置/首选项(python 2.7,Mac 的 IDLE),在那里我找到了下一个历史记录,非常感谢你是最棒的 :)【参考方案2】:

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

需要的模块:

    http://docs.python.org/library/readline.html http://docs.python.org/library/rlcompleter.html

【讨论】:

@user496852:只需将环境变量 PYTHONSTARTUP 设置为包含上述代码的文件路径。还要检查你是否有所需的模块。 没必要,按照basak的回答,指定按键绑定即可 矫枉过正。只需执行 alt+p 作为 Windows 用户,我必须先安装 pyreadline,然后使用 histfile = pathlib.Path.home().joinpath('.pythonhistory') 更改 histfile 定义。【参考方案3】:

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

这是默认配置,您可以根据自己的喜好从选项 -> 配置空闲更改这些快捷键。

【讨论】:

它被称为 history-next / history-previous【参考方案4】:

您没有指定哪个环境。假设您正在使用 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.

【讨论】:

欲了解更多信息:docs.python.org/2/library/idle.html#python-shell-window 这是我在 IDLE 中寻找的解决方案。向上箭头适用于从 bash shell 启动的 python 解释器。【参考方案5】:

Ctrl+p 是向上箭头的正常选择。确保在 Python 构建中启用了 gnu readline。

【讨论】:

这会询问我是否要打印【参考方案6】:

ALT + p 在 Windows 中的 Enthought Python 上为我工作。

【讨论】:

【参考方案7】:

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

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

对于 Ubuntu 12.04 服务器,我必须安装 libncurses-devlibreadline-dev,然后从源代码安装 Python 以启用向上历史(readline)行为。我几乎是这样做的:

sudo apt-get install libncurses-dev libreadline-dev

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

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

【讨论】:

对于遇到此问题的任何人,我在 14.04 并且仍然能够使用此解决方案来解决此问题,从 3.4.03.4.2 在此之后我需要做sudo pip install readline 才能让它工作(python 2.7.11) 这在 64 位 Ubuntu 16 上也适用于我。除了已经 apt 安装的 64 位 Python 之外,我还有 32 位 Python 3.5.2,从源代码编译和安装。刚刚做了sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386 并重新安装了源构建的Python。【参考方案8】:

上一个命令默认使用 ALT+p,您可以在 IDLE GUI >> OPtions >> Configure IDLE >>Key >>Custom Key Binding 中改为 Up-Arrow 不需要运行自定义脚本,除了 readlines 模块不在 Windows 中运行。 希望有帮助。 :)

【讨论】:

【参考方案9】:

在 CentOS 上,我修复了这个问题

yum install readline-devel

然后重新编译python 3.4。

在 OpenSUSE 上,我通过以下方式解决了这个问题

pip3 install readline

参考这个答案:https://***.com/a/26356378/2817654。 也许“pip3 install readline”是一个通用的解决方案。还没有在我的 CentOS 上尝试过。

【讨论】:

【参考方案10】:

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

让自己适应 IDLE:如果您只是将光标放在要重复的上一个命令上,然后按“输入”,则该命令将在当前位置重复,而不是按向上箭头返回上一个命令命令提示符。再次按回车,命令被执行。

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

source

【讨论】:

【参考方案11】:

在我的 mac os python3 您可以使用: control+p 早期命令 contrlo+n 下一条命令

【讨论】:

【参考方案12】:
alt+p  
go into options tab
configure idle
Keys

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

【讨论】:

【参考方案13】:

您不需要像 pyfunc 对 OSX 的回答这样的自定义脚本(至少在小牛上)。在 Idle 中,单击 Idle -> Preferences -> Keys,找到“history-next”和“history-previous”,然后将它们保留为默认键盘快捷键或根据典型的预期终端行为分配“向上箭头”和“向下箭头” .

这是在 OSX Mavericks 的 Idle 2.7 上。

【讨论】:

【参考方案14】:

如果你使用 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://***.com/a/40229934/332788

【讨论】:

安装 libncurses5-dev 和 libncursesw5-dev 足以修复我的 Python 3.5 安装,但是在我为其安装 readline 模块后 Python 3.6 崩溃了。可能需要重新编译。 它帮助了我 Ubuntu 18.04 python 版本 3.7.3 pip install readline【参考方案15】:

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

然后按回车键再次运行。

【讨论】:

【参考方案16】:

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

pip install pyreadline

sudo  port install py-readline (on Mac)

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

【讨论】:

'pip install readline' 为我工作。在 python 3.4 手动安装后,我所有的控制序列在 Centos 7 上都带有括号前缀 “找不到满足 py-readline 要求的版本(来自版本:)找不到与 py-readline 匹配的发行版”我讨厌这个世界 确保使用pip2pip3,具体取决于您安装的版本。 这会破坏 3.8 版的 python。不要安装! @WolfgangKuehn 是否有任何关于此的错误问题提交给他们的回购? (如果没有,请归档。)听起来很严重。【参考方案17】:

Ipython 并非总是如此……我非常喜欢它,但如果你尝试使用 ipython 运行 Django shell。类似>>>

ipython manage.py shell

如果你使用 virtualenv,它就不能正常工作。 Django 需要一些特殊的包含,如果你启动 ipython 则不存在,因为它启动默认系统 python,但不是虚拟的。

【讨论】:

【参考方案18】:

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

试试:

import readline

【讨论】:

【参考方案19】:

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

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

【讨论】:

【参考方案20】:

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

conda install ncurses

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

【讨论】:

【参考方案21】:

在带有 Python 2.x 的 Mac 上

➜ ~ brew install rlwrap

从 rlwrap 开始

➜ ~ rlwrap python

【讨论】:

【参考方案22】:

为了在python中重复上一条命令,你可以在windows中使用&lt;Alt + n&gt;

【讨论】:

如果 arrow-up 不起作用,您需要修复您的安装。可能需要pyreadline【参考方案23】:

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

【讨论】:

【参考方案24】:

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

【讨论】:

【参考方案25】:

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

【讨论】:

【参考方案26】:

在 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”,任何一个都不会起作用。在最初的制作过程中,有一些危险信号错误,但被忽略并完成了构建。这一次,似乎没有任何错误。

【讨论】:

以上是关于如何在 python 解释器 shell 中重复最后一个命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过python [duplicate]在shell上运行命令

交互式 shell 玩转 Python

从Scala和Python的“shell”说起

python shell使用哪个解释器?

ubuntu下shell中切换普通解释器和anaconda解释器的方法

一步一步地从 shell 执行一个 python 包,例如调试模式[重复]