如何在 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-dev
和 libreadline-dev
,然后从源代码安装 Python 以启用向上历史(readline)行为。我几乎是这样做的:
sudo apt-get install libncurses-dev libreadline-dev
之后,我删除了之前安装的 Python(不是 SYSTEM PYTHON,我从源代码安装的那个!)并从源代码重新安装它,一切都按预期工作。
我不必使用 pip 安装任何东西或编辑 .pythonstartup。
【讨论】:
对于遇到此问题的任何人,我在 14.04 并且仍然能够使用此解决方案来解决此问题,从3.4.0
到 3.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.3pip 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 匹配的发行版”我讨厌这个世界 确保使用pip2
或pip3
,具体取决于您安装的版本。
这会破坏 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中使用<Alt + n>
【讨论】:
如果 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上运行命令