2010-11-27 363 views
85

我如何重复上一个命令?常用的键:向上,Ctrl +向上,Alt-p不起作用。它们产生无意义的特征。如何在python解释器shell中重复上次的命令?

(ve)[[email protected] 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 
>>> 
+0

向上箭头正常工作对我来说(Ubuntu的),它的怪异。 – 2010-11-27 03:11:24

+2

同上,箭头在Windows上适用于我。你使用的是什么shell,以及什么操作系统的终端程序? – fmark 2010-11-27 03:12:40

+0

我在Fedora 13上安装了一个单独的python 2.6.6安装,运行virtualenv,使用默认的python shell,在gnome-terminal – kakarukeys 2010-11-27 03:15:58

回答

45

我使用以下命令启用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
+0

这很酷。我如何使用它? – kakarukeys 2010-11-27 03:17:43

+0

@ user496852:只需将env变量PYTHONSTARTUP设置为包含上述代码的文件路径即可。另请检查,如果你有所需的模块。 – pyfunc 2010-11-27 03:19:05

+6

这是没有必要的,只是按照basak的答案的指示和指定键绑定 – Tim 2013-03-06 08:46:43

0

向上箭头的作品对我来说太。 而我不认为你需要为python内建命令行安装Readline模块。你应该试试Ipython来检查。 或者这可能是你的钥匙圈地图的问题。

6

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

1

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

ipython manage.py shell 

如果您使用virtualenv,它无法正常工作。 Django需要一些特殊的包含,如果你启动ipython,它不在那里,因为它启动了默认的系统python,但不是那个虚拟的。

116

在IDLE中,转到选项 - >配置空闲 - >按键,然后在那里选择历史 - 下一个,然后历史 - 上一步更改密钥。

然后点击Get New Keys for Selection,您就可以选择任何您想要的组合键。

5

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

2
alt+p 
go into options tab 
configure idle 
Keys 

history-previous下的命令,你可以把它改成你更喜欢一次的东西在这里。

1

这可能发生在运行python script.py而不是python以进入交互式shell,以及readline被禁用的其他原因。

尝试:

import readline 
15

你没有具体的哪个解释。假设你正在使用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. 
37

Alt + P键从histroy前面的命令, Alt + N键从历史的下一个命令。

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

2

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

pip install py-readline 

sudo的港口安装PY-的ReadLine(在Mac上)

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

0

如果使用MacOSX的,按control p循环运行并且control n循环运行。我正在使用IDLE Python 3.4.1 Shell。

5

在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和从源代码重新安装它和一切工作按预期(不系统蟒蛇,我已经从源代码安装了一个!)。

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

1

你不需要像pyfunc的OSX(至少在特拉维斯)答案的自定义脚本。在空闲状态下,点击空闲 - >首选项 - >按键,找到“历史 - 下一个”和“历史 - 上一个”,并且保留它们的默认键盘快捷键或者为典型的预期终端行为分配“向上箭头”和“向下箭头” 。

这是在OSX Mavericks上的Idle 2.7上。

2

在CentOS,我通过

yum install readline-devel 

解决这个问题,然后重新编译蟒蛇3.4。

在openSUSE,我通过

pip3 install readline 

参考这个答案解决这个问题:https://stackoverflow.com/a/26356378/2817654。 也许“pip3安装readline”是一个通用的解决方案。没有尝试过我的CentOS。

1

向上箭头只能在Python命令行中使用。

在IDLE(Python GUI)中,缺省值为: Alt-p:检索与您输入内容相匹配的先前命令。 的Alt-N:检索下一个... 在Python 2.7.9例如,您可以查看/修改操作键选择: 选项 - >配置IDLE - >(制表)键

0

是控制+ P在蟒蛇3.4 IDEL

1

对于蟒蛇为Python 3.5的Mac OS,我需要安装ncurses

conda install ncurses 

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

1

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

3

在我的MAC OS python3 你可以使用: 控制+ P早期命令 contrlo + N下一个命令

1

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

适应信息你自己IDLE:而不是击中向上的箭头来带回以前的c如果您只需将光标置于您想要重复的上一个命令上,然后按“enter”键,该命令将在当前命令提示符处重复。再次按下Enter,命令就会被执行。

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

source

0

在Mac上使用Python 2。X

➜ ~ brew install rlwrap

开始rlwrap

➜ ~ rlwrap python