¿Cómo repetir el último comando en el intérprete de Python?

133

¿Cómo repito el último comando? Las teclas habituales: Arriba, Ctrl + Arriba, Alt-p no funcionan. Producen personajes sin sentido.

(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
>>> 
kakarukeys
fuente
La flecha hacia arriba funciona correctamente para mí (Ubuntu), es raro.
Vincent Savard
3
Lo mismo, la flecha hacia arriba funciona para mí en Windows. ¿Qué shell está utilizando y qué programa de terminal en qué sistema operativo?
fmark
Instalé una instalación separada de Python 2.6.6 en Fedora 13, ejecuté virtualenv, usando el shell predeterminado de Python, en gnome-terminal
kakarukeys
55
solo para su información, esos personajes "sin sentido" son "secuencias de escape" desarrolladas por DEC y otros en los días en que las computadoras centrales tenían acceso por terminales a través de líneas telefónicas. ^ [es ESC (escape), ^ [[es escape- [o CSI (iniciador de secuencia de control, IIRC) y CSI-A es la secuencia para "arriba". y cuando habilita ncurses, usando la respuesta a continuación, esas secuencias se interpretan en lugar de mostrarse.
jcomeau_ictx
44
Tuve este problema debido a la instalación de una versión de Python desde la fuente (Python3.4). Algunos de los comentarios a continuación recomiendan instalar Ipython y quiero mencionar que tengo el mismo comportamiento incluso con Ipython. Para el servidor Ubuntu 12.04, tuve que instalar libncurses-dev libreadline-devy luego configure-make-installPython y funcionó después de eso. Agregado como respuesta ...
erewok

Respuestas:

60

Utilizo lo siguiente para habilitar el historial en Python Shell.

Este es mi archivo .pythonstartup . La variable de entorno PYTHONSTARTUP se establece en esta ruta de archivo.

# 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

Necesitará tener los módulos readline, rlcompleter para habilitar esto.

Consulte la información sobre esto en: http://docs.python.org/using/cmdline.html#envvar-PYTHONSTARTUP .

Módulos requeridos:

  1. http://docs.python.org/library/readline.html
  2. http://docs.python.org/library/rlcompleter.html
pyfunc
fuente
@ user496852: simplemente configure la variable env PYTHONSTARTUP en la ruta del archivo que contiene el código anterior. Compruebe también si tiene los módulos necesarios.
pyfunc
66
no es necesario, solo siga las instrucciones de la respuesta de basak y asigne las combinaciones de teclas
Timofey
1
Una exageración. Just do alt + p
user32882
164

En IDLE, vaya a Opciones -> Configurar IDLE -> Teclas y allí seleccione history-next y luego history-previous para cambiar las teclas.

Luego haga clic en Obtener nuevas claves para la selección y estará listo para elegir la combinación de teclas que desee.

basak
fuente
44
Para los buscadores, esto también funciona en Linux Mint 17 Cinnamon.
user1063287
44
funciona para Windows 10, Python 3.6.1 también. Muchas gracias, esto es limpio y claro, especialmente. útil para nuevos alumnos.
jyao
1
La respuesta más apropiada. Debería haber sido elegido como el correcto.
Davidson Lima
no hay opciones -> Configurar IDLE para Python 2.7: /
DaniPaniz
Necesitaba ir a la configuración / preferencias (python 2.7, IDLE para mac) y allí encontré el historial a continuación, muchas gracias, eres el mejor :)
DaniPaniz
48

Alt + p para el comando anterior de histroy, Alt + n para el siguiente comando del historial.

Esta es la configuración predeterminada, y puede cambiar estos atajos de teclado según sus preferencias desde Opciones -> Configurar IDLE.

franco
fuente
2
se llama history-next / history-previous
DaniPaniz
17

No especificó qué entorno. Suponiendo que está utilizando IDLE.

De la documentación IDLE: Historial de comandos:

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.
Info5ek
fuente
Para más información: docs.python.org/2/library/idle.html#python-shell-window
creativeby el
1
Esta es la solución que estoy buscando en IDLE. La flecha hacia arriba funcionó en el intérprete de Python lanzado desde bash shell
John Doe
8

ALT + p funciona para mí en Enthought Python en Windows.

Deniss
fuente
7

Ctrl + p es la alternativa normal a la flecha hacia arriba. Asegúrese de tener la línea de lectura gnu habilitada en su compilación de Python.

nmichaels
fuente
1
esto pregunta si quiero imprimir
ashleedawg
7

En Ubuntu Server 12.04, tuve este problema después de instalar una versión de Python desde la fuente (Python3.4).

Algunos de los comentarios aquí recomiendan instalar Ipython y quiero mencionar que tengo el mismo comportamiento incluso con Ipython. Por lo que puedo decir, este es un problema de línea de lectura.

Para el servidor Ubuntu 12.04, tuve que instalar libncurses-devy libreadline-devluego instalar Python desde la fuente para que se habilitara el comportamiento del historial (readline). Yo prácticamente hice esto:

sudo apt-get install libncurses-dev libreadline-dev

Después de eso, eliminé el Python previamente instalado (¡NO EL SISTEMA PYTHON, el que había instalado desde la fuente!) Y lo reinstalé desde la fuente y todo funcionó como se esperaba.

No tuve que instalar nada con pip o editar .pythonstartup.

Erewok
fuente
2
Para cualquier persona que se encuentra con este problema, estoy en 14.04 y todavía era capaz de utilizar esta solución para solucionar este problema que va de 3.4.0a 3.4.2.
ctzdev
2
Tenía que hacer sudo pip install readlinedespués de esto para que funcione (python 2.7.11)
Rob Watts
1
Esto funcionó para mí en Ubuntu 16 de 64 bits también. Tengo Python 3.5.2 de 32 bits, compilado e instalado desde fuentes, además de las Pythons de 64 bits ya instaladas. Acabo de hacer sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386y reinstalé el Python construido en origen.
Alex Che
7

De manera predeterminada, use ALT + p para el comando anterior, puede cambiar a Flecha arriba en su lugar en IDLE GUi >> OPCIONES >> Configurar IDLE >> Clave >> Enlace de teclas personalizado No es necesario ejecutar un script personalizado, además el módulo readlines no ejecutar en Windows Espero que ayude. :)

jocmtb
fuente
3

En CentOS, arreglo esto

yum install readline-devel

y luego recompilar python 3.4.

En OpenSUSE, arreglo esto

pip3 install readline

Refiriéndose a esta respuesta: https://stackoverflow.com/a/26356378/2817654 . Quizás "pip3 install readline" es una solución general. No lo he probado en mi CentOS.

peter pan gz
fuente
3

En mi Mac OS Python3 puede usar: control + p comando temprano contrlo + n comando siguiente

gkgy
fuente
3

Encuentro la información que copié a continuación. Respondo la pregunta.

Adaptarse a IDLE: en lugar de presionar la flecha hacia arriba para recuperar un comando anterior, si simplemente coloca el cursor en el comando anterior que desea repetir y luego presiona "enter", ese comando se repetirá en el símbolo del sistema actual. Presione enter nuevamente, y el comando se ejecutará.

Fuerce IDLE para que se adapte a usted: si insiste en hacer que las teclas de flecha en la ventana del símbolo del sistema IDLE funcionen como las de cualquier otro símbolo del sistema, puede hacerlo. Vaya al menú "Opciones", seleccione "Configurar IDLE" y luego "Teclas". Cambiar la clave asociada con las acciones "comando anterior" y "comando siguiente" para que sean la flecha hacia arriba y la flecha hacia abajo, respectivamente.

fuente

koliyat9811
fuente
2
alt+p  
go into options tab
configure idle
Keys

busque history-previousel comando, puede cambiarlo a algo que le guste más una vez aquí.

LakeEffect
fuente
2

No entiendo por qué hay tantas explicaciones largas sobre esto. Todo lo que tiene que hacer es instalar el paquete pyreadline con:

pip install py-readline

sudo port install py-readline (en Mac)

(Suponiendo que ya haya instalado PIP ).

not2qubit
fuente
2
'pip install readline' funcionó para mí. Todas mis secuencias de control salían con prefijos de paréntesis en Centos 7 después de la instalación manual de Python 3.4
Ziggy Eunicien
"No se pudo encontrar una versión que satisfaga el requisito py-readline (de las versiones
:)
Asegúrese de usar pip2o pip3, según la versión que haya instalado.
not2qubit
2

No necesita un script personalizado como la respuesta de pyfunc para OSX (al menos en disidentes). En Inactivo, haga clic en Inactivo -> Preferencias -> Teclas, ubique "historial-siguiente" e "historial-anterior", y déjelos con su atajo de teclado predeterminado o asigne "flecha hacia arriba" y "flecha hacia abajo" según el comportamiento típico esperado del terminal .

Esto está en Idle 2.7 en OSX Mavericks.

AllTradesJack
fuente
2

Si usa Debian Jessie, ejecute esto para arreglar la instalación de su sistema 2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

Para arreglar mi otra 3.5.2instalación que instalé con pyenv :

pip install readline

Fuentes:

[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

aliopi
fuente
Instalar libncurses5-dev y libncursesw5-dev fue suficiente para arreglar mi instalación de Python 3.5, pero Python 3.6 se rompió después de instalar el módulo readline para ello. Probablemente necesite recompilar.
Andriy Makukha
Me ayudó Ubuntu 18.04 python versión 3.7.3pip install readline
akpp
2

Al usar las teclas de flecha para ir al inicio del comando y presionar enter, se copia como el comando actual.

Luego solo presione enter para ejecutarlo nuevamente.

Raja Dorji
fuente
1

Ipython no siempre es así ... Me gusta bastante, pero si intentas ejecutar Django shell con ipython. Algo como >>>

ipython manage.py shell

no funciona correctamente si usa virtualenv. Django necesita algunas inclusiones especiales que no están allí si inicia ipython, porque inicia el sistema predeterminado python, pero no es virtual.

Jazzuell
fuente
1

Esto puede suceder cuando ejecuta python script.pyvs solo pythonpara ingresar al shell interactivo, entre otras razones para la desactivación de readline.

Tratar:

import readline
Anuj Gupta
fuente
1

La flecha hacia arriba solo funciona en la línea de comandos de Python.

En IDLE (Python GUI) los valores predeterminados son: Alt-p: recupera el comando anterior que coincide con lo que ha escrito. Alt-n: recupera el siguiente ... En Python 2.7.9, por ejemplo, puede ver / cambiar las teclas de acción seleccionando: Opciones -> Configurar IDLE -> Teclas (Tab)

teo
fuente
1

Para anaconda para python 3.5, necesitaba instalar ncurses

conda install ncurses

Después de ncursescompletar la pestaña de instalación, el historial y la navegación a través de las flechas izquierda y derecha funcionaron en el shell interactivo.

Danny Sullivan
fuente
1

En Mac con Python 2.x

➜ ~ brew install rlwrap

Comience con rlwrap

➜ ~ rlwrap python

northtree
fuente
1

Para repetir el último comando en Python, puede usarlo <Alt + n>en Windows

usuario13480918
fuente
0

La flecha hacia arriba también funciona para mí. Y no creo que necesite instalar el módulo Readline para la línea de comandos incorporada de Python. Deberías probar Ipython para verificar. O tal vez sea el problema de su mapa de teclas.

wliao
fuente
0

Si usa MacOSX, presione control ppara subir y control nbajar. Estoy usando IDLE Python 3.4.1 Shell.

buque de guerra
fuente
0

es control + p en Mac os en python 3.4 IDEL

ruidosamente
fuente
0

En Ubuntu 16.04, tuve el mismo problema después de actualizar Python desde el 3.5 precargado a la versión 3.7 desde el código fuente . Como sugirió @erewok, lo hice

sudo apt-get install libncurses-dev libreadline-dev

seguido de: sudo make install Después de eso, la tecla de flecha hacia arriba funcionó. No estoy seguro de qué módulo se requiere para solucionar el problema o ambos, pero sin "hacer la instalación", ninguno funcionaría. Durante la creación inicial, hubo algunos errores de bandera roja, pero se ignoraron y completaron la compilación. Esta vez, no parecía haber ningún error.

Leon Chang
fuente