可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
How do I repeat the last command? The usual keys: Up, Ctrl+Up, Alt-p don't work. They produce nonsensical characters.
(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
>>>
回答1:
I use the following to enable history on python shell.
This is my .pythonstartup file . PYTHONSTARTUP environment variable is set to this file path.
# 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
You will need to have the modules readline, rlcompleter to enable this.
Check out the info on this at : http://docs.python.org/using/cmdline.html#envvar-PYTHONSTARTUP.
Modules required:
- http://docs.python.org/library/readline.html
- http://docs.python.org/library/rlcompleter.html
回答2:
In IDLE, go to Options -> Configure IDLE -> Keys and there select history-next and then history-previous to change the keys.
Then click on Get New Keys for Selection and you are ready to choose whatever key combination you want.
回答3:
Alt + p for previous command from histroy,
Alt + n for next command from history.
This is default configure, and you can change these key shortcut at your preference from Options -> Configure IDLE.
回答4:
You didn't specific which interpreter. Assuming you are using IDLE.
From IDLE documentation:
Command history:
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.
回答5:
Ctrl+p is the normal alternative to the up arrow. Make sure you have gnu readline enabled in your Python build.
回答6:
By default use ALT+p for previous command, you can change to Up-Arrow instead in IDLE GUi >> OPtions >> Configure IDLE >>Key >>Custom Key Binding
It is not necesary to run a custom script, besides readlines module doesnt run in Windows.
Hope That Help. :)
回答7:
ALT + p works for me on Enthought Python in Windows.
回答8:
On Ubuntu Server 12.04, I had this problem after installing a version of Python from source (Python3.4).
Some of the comments here recommend installing Ipython and I want to mention that I have the same behavior even with Ipython. From what I can tell, this is a readline problem.
For Ubuntu 12.04 server, I had to install libncurses-dev
and libreadline-dev
and then install Python from source for up-history (readline) behavior to be enabled. I pretty much did this:
sudo apt-get install libncurses-dev libreadline-dev
After that, I deleted the previously installed Python (NOT THE SYSTEM PYTHON, the one I had installed from source!) and reinstalled it from source and everything worked as expected.
I did not have to install anything with pip or edit .pythonstartup.
回答9:
In my mac os python3
you can use:
control+p early command
contrlo+n next command
回答10:
alt+p
go into options tab
configure idle
Keys
look under history-previous
for the command, you can change it to something you like better once here.
回答11:
I don't understand why there are so many long explanations about this. All you have to do is install the pyreadline package with:
pip install py-readline
sudo port install py-readline (on Mac)
(Assuming you have already installed PIP.)
回答12:
You don't need a custom script like pyfunc's answer for OSX (at least on mavericks). In Idle click on Idle -> Preferences -> Keys, locate "history-next" and "history-previous", and either leave them with their default keyboard shortcut or assign "up arrow" and "down arrow" per typical expected terminal behavior.
This is on Idle 2.7 on OSX Mavericks.
回答13:
On CentOS, I fix this by
yum install readline-devel
and then recompile python 3.4.
On OpenSUSE, I fix this by
pip3 install readline
Referring to this answer:https://stackoverflow.com/a/26356378/2817654.
Perhaps "pip3 install readline" is a general solution. Haven't tried on my CentOS.
回答14:
I find information that I copied below answer the question
Adapt yourself to IDLE: Instead of hitting the up arrow to bring back a previous command, if you just put your cursor on the previous command you want to repeat and then press "enter", that command will be repeated at the current command prompt. Press enter again, and the command gets executed.
Force IDLE to adapt itself to you: If you insist on making the arrow keys in the IDLE command prompt window work like those in every other command prompt, you can do this. Go to the "Options" menu, select "Configure IDLE", and then "Keys". Changing the key that is associated with the "previous command" and "next command" actions to be the up arrow, and down arrow, respectively.
source
回答15:
Ipython isn't allways the way... I like it pretty much, but if you try run Django shell with ipython. Something like>>>
ipython manage.py shell
it does'n work correctly if you use virtualenv. Django needs some special includes which aren't there if you start ipython, because it starts default system python, but not that virtual.
回答16:
This can happen when you run python script.py
vs just python
to enter the interactive shell, among other reasons for readline being disabled.
Try:
import readline
回答17:
Up Arrow works only in Python command line.
In IDLE (Python GUI) the defaults are:
Alt-p : retrieves previous command matching what you have typed.
Alt-n : retrieves next...
In Python 2.7.9 for example, you can see/change the Action Keys selecting:
Options -> Configure IDLE -> (Tab) Keys
回答18:
For anaconda for python 3.5, I needed to install ncurses
conda install ncurses
After the ncurses
install tab complete, history, and navigating via left and right arrows worked in the interactive shell.
回答19:
If you use Debian Jessie run this to fix your system installation 2.7.9
sudo apt-get install libncurses5-dev libncursesw5-dev
To fix my other 3.5.2
installation which I installed with pyenv :
pip install readline
Sources:
[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
回答20:
Up arrow works for me too.
And i don't think you need to install the Readline module for python builtin commandline.
U should try Ipython to check.
Or maybe it's the problem of your keybord map.
回答21:
If using MacOSX, press control p
to cycle up and control n
to cycle down. I am using IDLE Python 3.4.1 Shell.
回答22:
it is control + p in Mac os in python 3.4 IDEL
回答23:
On Mac with Python 2.x
➜ ~ brew install rlwrap
Start with rlwrap
➜ ~ rlwrap python
回答24:
Using arrow keys to go to the start of the command and hitting enter copies it as the current command.
Then just hit enter to run it again.
回答25:
On Ubuntu 16.04, I had the same problem after upgrading Python from the preloaded 3.5 to version 3.7 from source code.
As @erewok suggested, I did
sudo apt-get install libncurses-dev libreadline-dev
followed by:
sudo make install
After that, the arrow-up key worked. Not sure which module is required to fix the problem or both, but without "make install", none would work. During initial make, there were some red-flag errors, but ignored and completed the build. This time, there didn't seem to have any errors.