2010-08-14 9 views
23

Me preguntaba si alguien puede explicar por qué, de repente, en el modo interactivo de Python, todas las teclas de flecha están fallando.Historia del modo interactivo de Python y teclas de flecha

Cuando presiono el botón, por ejemplo, para pasar por el historial de comandos obtengo "^ [[A". Lo mismo con cualquier otra tecla de flecha.

No tengo idea de por qué sucedió esto y funcionaba antes (en OS X Snow Leopard). ¿Alguien sabe una manera de arreglar esto?

Muchas gracias,

G

Respuesta

6

No dice qué Python está utilizando pero los síntomas que menciona son de hecho generalmente causados ​​por Python que no está construido con el soporte readline. Hoy en día, Python en OS X puede construirse para usar la biblioteca GNU readline o la biblioteca editline suministrada por Apple (AKA libedit). Puede usar los siguientes dos comandos para mostrar exactamente qué Python está usando. Si eso no te ayuda a descubrir qué está pasando, edita tu pregunta para mostrar el resultado de esos comandos.

He aquí un ejemplo que muestra una reciente DarwinPorts Python 2.6 en OS X 10.6:

$ python -c 'import sys;print(sys.version);print(sys.executable)' 
2.6.5 (r265:79063, Jul 15 2010, 01:53:46) 
[GCC 4.2.1 (Apple Inc. build 5659)] 
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python 

$ otool -L $(python -c 'import readline; print(readline.__file__)') 
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/readline.so: 
    /opt/local/lib/libreadline.6.1.dylib (compatibility version 6.0.0, current version 6.1.0) 
    /opt/local/lib/libncursesw.5.dylib (compatibility version 5.0.0, current version 5.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 

El prefijo de ruta /opt/local/ es la ubicación predeterminada para el software DarwinPorts-instalado y la salida del otool indica que el módulo de este Python readline está vinculado dinámicamente a la biblioteca GNU readline instalada en MacPorts.

+0

La sugerencia para ver el módulo readline de Python fue útil. Aparentemente, el mío no estaba * vinculado * a 'libreadline'. No sé por qué no, aunque desde readline se instaló muy bien. De todos modos, 'port -f uninstall py27-readline; la instalación del puerto py27-readline' lo solucionó. – Celada

5

Este comportamiento se muestra habitualmente cuando usted no tiene readline apoyo. Si está utilizando MacPorts, intente port install readline, vea si lo va a arreglar. También puede ver this page para obtener más explicaciones.

(También es útil saber: algunos programas no utilizan readline incluso si está presente en el sistema Se puede obligar a que en ellos mediante el uso de rlwrap (port install rlwrap) Por ejemplo:.. rlwrap ocaml -init code.ml comenzará hasta OCaml, leer code.ml, e inicie REPL con soporte readline)

+0

intentado instalar readline pero didn' t ayuda. Gracias de cualquier manera. Seguirá cavando – givp

+1

rlwrap funcionó como solución alternativa. ¡Gracias! –

+0

Me funcionó también. Para que funcione con python's pdb, instale rlwrap ('port install rlwrap'), luego inicie python con el comando' rlwrap python'. Consulte las páginas man para rlwrap para pasar argumentos, etc. – Dannid

13

Finalmente funcioné. Solo tuve que instalar readline con easy_install y cursores y retroceso comenzó mágicamente trabajando.

sudo /opt/local/bin/easy_install-2.5 readline 
+1

easy_install readline hizo el trik.Gracias @mikael – gnuyoga

+1

'' apt-get install libncurses5-dev && pip install readline'' variant funcionó en mi ubuntu (base en trusty) – vaab

+3

'pip install readline' era todo lo que necesitaba. – maxko87

15

Si está utilizando homebrew, esta es una solución fácil:

 
brew uninstall python 
brew uninstall readline 
brew install readline --universal 
brew install python 

Eso lo fijó para mí (con OS X 10.9.5 Mavericks)

+2

Acabo de leer el trabajo en python3 para OSX 10.10.1. Tuve que cambiar la última línea a 'brew install python --readline --framework' y luego tuve que hacer lo siguiente: (1) Agregué'/usr/local/share/python' a mi PATH. (2) 'pip3.4 install readline'. Luego escribí 'python3' y readline estaba trabajando nuevamente. –

+0

¿va a reemplazar el sistema Python 2.7.10 con alguna otra versión de Python 2.7? – user5359531

+0

@ user5359531 sistema python no será reemplazado, pero si ya has 'brew install python' entonces sigues este procedimiento, brew puede reemplazar _its_ version con uno más nuevo. Compruebe: 'which python', (informa que la versión de brew está en/usr/local/bin/python),' brew unlink python && which python' informa la versión del sistema, 'brew link python' para restablecer la versión brew. No es destructivo – ptim

Cuestiones relacionadas