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

如何重复最后一个命令? 常用的键: 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
>>>
184333 次浏览

我使用以下命令在 pythonshell 上启用历史记录。

这是我的 . pythonstarter文件,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

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

Ctrl + p 是向上箭头的正常替代方法。

Ipython 并不总是这样... ... 我非常喜欢它,但是如果你尝试用 Ipython 运行 Django shell。类似 > >

ipython manage.py shell

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

在 IDLE 中,转到 Options-> ConfigureIDLE-> Keys,然后选择 history-next,然后选择 history-before 来更改键。

然后点击获取新的选择键,你就可以选择任何你想要的组合键。

ALT + p 可以在 Windows 下的 Enthought Python 上使用。

alt+p
go into options tab
configure idle
Keys

history-previous下查找命令,您可以在这里将其更改为您更喜欢的命令。

当您运行 python script.py而不仅仅是 python来进入交互式 shell 时,除了禁用 readline 的其他原因之外,还可能发生这种情况。

试试:

import readline

您没有指定哪个环境,假设您使用的是 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.

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

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

我不明白为什么对此有这么多冗长的解释。所有您需要做的就是安装 准绳软件包:

pip install pyreadline


sudo  port install py-readline (on Mac)

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

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

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

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

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

sudo apt-get install libncurses-dev libreadline-dev

之后,我删除了之前安装的 PYTHON (不是我从源代码安装的那个系统 PYTHON!)然后从源代码重新安装,一切正常。

我不需要用 pip 或 edit. pythonstarter 安装任何东西。

您不需要像 pyfunc 那样的自定义脚本来解决 OSX 问题(至少在特立独行者上)。在“空闲”中点击“空闲”-> “首选项”-> “键”,找到“历史-下一个”和“历史-上一个”,或者保留它们的默认快捷键,或者按照典型的预期终端行为分配“向上箭头”和“向下箭头”。

这里是 OSX 小牛队的 Idle 2.7。

在 CentOS 上,我通过

yum install readline-devel

然后重新编译 python 3.4。

在 OpenSUSE 上,我通过

pip3 install readline

关于这个答案: https://stackoverflow.com/a/26356378/2817654。 也许“ pip3 install readline”是一个通用的解决方案。

向上箭头只能在 Python 命令行中工作。

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

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

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

conda install ncurses

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

默认情况下,对于上一个命令使用 ALT + p,可以在 IDLE GUi > > OPtions > > ConfigureIDLE > > Key > > Custom Key Binding 中更改为 Up-Arrow 不需要运行自定义脚本,而且 readlines 模块不在 Windows 中运行。 希望能帮上忙。 :)

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

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

sudo apt-get install libncurses5-dev libncursesw5-dev

要修复我的其他 3.5.2安装,我与 Penenv安装:

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

我发现信息,我复制下面回答这个问题

使自己适应 IDLE: 如果你只是将光标放在想要重复的前一个命令上,然后按下“ Enter”,这个命令将在当前命令提示符下重复,而不是按向上箭头返回前一个命令。再次按回车键,命令执行。

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

来源

在 Mac 上使用 Python2.x

➜ ~ brew install rlwrap

从包装袋开始

➜ ~ rlwrap python

使用箭头键进入命令的开始并按回车键将其复制为当前命令。

然后点击回车再次运行。

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

sudo apt-get install libncurses-dev libreadline-dev

其次是: sudo make install 之后,向上箭头键起作用了。不确定需要哪个模块来修复这个问题,或者两者兼而有之,但是如果没有“ make install”,任何模块都不能工作。在最初的 make 过程中,出现了一些危险的错误,但是忽略并完成了构建。这一次,似乎没有任何错误。

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