En shells como el shell interactivo de python, generalmente puede usar las teclas de flecha para moverse en la línea actual u obtener comandos anteriores (con flecha hacia arriba), etc.
Pero después de ingresar a otra máquina y comenzar python
allí, obtengo sesiones como:
>>> import os
>>> ^[[A
donde el último personaje viene de flecha hacia arriba. O, usando la flecha izquierda:
>>> impor^[[D
¿Cómo puedo arreglar esto?
En la fiesta normal, las teclas de flecha funcionan bien. El comportamiento extraño está solo en el shell interactivo de python (o perl, etc.).
python
shell
ssh
arrow-keys
Franco
fuente
fuente
Respuestas:
Parece que readline no está habilitado. Compruebe si la
PYTHONSTARTUP
variable está definida, para mí apunta/etc/pythonstart
y ese archivo es ejecutado por el proceso de Python antes de ser interactivo, lo que configura el manejo de la línea de lectura / historial.Gracias a @chown aquí están los documentos sobre esto: http://docs.python.org/2/tutorial/interactive.html
fuente
PYTHONSTARTUP
, noPYTHONSTART
. No estoy seguro sobre el/etc/pythonstart
archivo específico de distribución .brew reinstall python3
He resuelto este problema instalando el
readline
paquete:fuente
libncurses-dev
en mi máquina Ubuntu, luego readline se instaló correctamente.ncurses-devel
en CentOS y luegoreadline
instalado sin problemas. Shell interactivo ahora está funcionando.pip install readline
en mi máquina OS X, cada vez que falla incluso después de éxito haciendobrew install readline
gnureadline
lugar, ver stackoverflow.com/q/43013060/2846923En OS X, tengo un problema diferente.
Cuando uso el sistema Python Shell, las claves no son un problema, sino un problema en virtualenv. Intentaría reinstalar / actualizar virtualenv / readline y nada solucionado.
Mientras intento
import readline
en el shell de python problemático, aparece este mensaje de error:Porque hay
/usr/local/opt/readline/lib/libreadline.7.dylib
pero nolibreadline.6.dylib
, así que hago un enlace de símbolo:¡El problema ha sido resuelto!
fuente
brew update && brew upgrade
. Aún no se sabe si esto rompió PHP en el proceso.ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
solucionó el problema de los códigos de escaneo, pero no recuperó la recuperación del comando de historial. Aunque en este caso, la mitad de una solución es mejor que ninguna. (Sí, también agregué un enlace para 6, no hay diferencia). Anexo: esto fue / es solo un problema con python2 para mí. python3 funcionó bien sin los enlaces.En OS X, las actualizaciones de Xcode a veces se rompen
readline
. Solución:Si el problema persiste, intente eliminar
readline
usandopip
e instalarlo utilizandoeasy_install
:fuente
easy_install
opcióneasy_install
funciona para mí, mientras que el que tiene pip no funciona.brew link readline
(aunque ya estaba vinculado) lo arregló para mí.En OS X, usando python 3.5 y virtualenv
En el intérprete hacer:
Ahora las teclas de flecha deberían funcionar correctamente.
Información Adicional...
Tenga en cuenta que a partir del 1 de octubre de 2015, readline ha sido DEPRECADO (fuente https://github.com/ludwigschwardt/python-readline )
Utilice gnureadline en su lugar (consulte: https://github.com/ludwigschwardt/python-gnureadline )
Si instalo readline en lugar de gnureadline usando python 3.5, recibo errores después de intentar importar en el intérprete:
fuente
import gnureadline
en la parte superior de cada sesión interactiva lo que es realmente molesto. ¿Hay alguna manera de comenzar esto al comienzo de cada sesión interactiva?import gnureadline
). Para posibles otras ideas ver también: ejecutar comandos Python intérprete de línea con carga automáticamente las importacionesMe he encontrado con este problema recientemente y después de leer mucho sobre
pip install readline
(no funciona para mac osx)pip install gnureadline
y no estar satisfecho, esta es mi configuración que permite usar las teclas de flecha en cualquier consola de Python:pip install gnureadline
ahora puede hacerlo
import gnureadline
y las teclas de flecha deberían funcionar como se espera. Para que funcionen automáticamente, siga los siguientes pasos:~/.startup.py
:import gnureadline
~/.bash_profile
:export PYTHONSTARTUP=~/.startup.py
Una cosa que no funciona, pero lo hizo en mi configuración anterior es: importación automática de gnureadline en
pdb.set_trace()
. Si alguien tiene una buena solución a este problema, agradecería un comentario.fuente
fuente
Tuve problemas con el historial de shell (comandos de tabulación / flechas) de Python 3.6.x en Ubuntu 16.04 LTS.
Python 3.6.x se instaló desde la fuente.
Lo que resolvió para mí fue instalar el módulo "gnureadline" como dijo el usuario12345, usando esta línea de comando:
:)
fuente
import gnureadline
al shell para que funcioneEstos son los pasos que funcionaron para mí en ubuntu 12.04 para python 3.3.
1) abre el terminal y escribe
sudo apt-get install libreadline-dev
2) descargue el archivo fuente de python 3.3.2 desde http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz
3) extraerlo y navegar al directorio Python-3.3.2 / en un shell
4) ejecuta el siguiente comando:
fuente
Se vio afectado después de actualizar Mac a High Sierra, esto lo resolvió con éxito por mí:
fuente
En CentOS, arreglo esto
yum install readline-devel
y luego recompilar python 3.4.
En OpenSUSE, arreglo esto
siguiendo la respuesta de Valerio Crini.
Quizás "pip3 install readline" es una solución general. No lo he probado en mi CentOS.
fuente
pip install readline
sin recompilar Python y funcionó bien.Lo arreglé haciendo lo siguiente:
pip install readline
Encontré otro error aquí:
gcc: readline/libreadline.a: No such file or directory
gcc: readline/libhistory.a: No such file or directory
Lo arreglé instalando
patch
:yum install patch
Después de eso logré ejecutar con
pip install readline
éxito lo que resolvió los caracteres de escape en mi shell de Python.FYI, estoy usando RedHat
fuente
Si usa Anaconda Python, puede solucionar esto ejecutando:
¡Trabajó para mi!
fuente
readline
ya está instalado, tengo que hacerconda install ncurses
para que funcione.Para aquellos que usan conda, la instalación del paquete readline desde el canal conda-forge solucionará el problema:
fuente
Ninguna de estas respuestas funcionó para mí en dos versiones diferentes de Ubuntu. Lo que funcionó para mí, pero no es una solución verdadera, es envolver mi código de Python en una llamada a
rlwrap
(disponible en los repositorios de ubuntu):rlwrap python mycode.py
fuente
¿Llamó a ssh con el parámetro -t para decirle a ssh que le asigne un terminal virtual?
Desde la página del manual:
Además, es posible que también deba establecer la variable de entorno TERM en el servidor correctamente como se sugiere en otra publicación.
fuente
En Mac OS X Mojave 10.14.6 con varias instalaciones históricas
brew
, resolví esto con:Es probable que no haya una bala mágica dado que todos tienen un escenario de instalación diferente. Intenté lo anterior también, por lo que puede haber sido una combinación de algunas de las respuestas. El valor predeterminado de Brew
python3
es que si instaló elpython2
paquete, también debe reinstalarse.fuente
¿Has intentado usar un cliente SSH diferente? Algunos clientes SSH tienen mapas de teclas especiales incorporados para diferentes procesos remotos. Me encontré con este mucho con emacs.
¿Que cliente estás usando? Recomiendo probar Putty y SecureCRT para comparar su comportamiento.
fuente
el módulo readline ha quedado en desuso, lo que provocará un error de puntero no válido en las últimas versiones de python al ejecutar quit () o exit () en el shell de python.
pip install gnureadline
en lugarfuente
¿Cómo está configurada su variable de env $ TERM [a] cuando las cosas funcionan bien y [b] cuando no lo hacen? La configuración de Env es a menudo la clave para tales problemas.
fuente
Intente ejecutar una biblioteca de códigos de claves en el servidor. Si eso no funciona, intente descargar una biblioteca con capacidad de lectura de clave.
fuente
Intenté compilar Python 2.7 en Ubuntu 14.0. Necesitarás libreadline-dev. Sin embargo, si lo obtiene de apt-get, la versión actual es 6.3, que es incompatible con Python 2.7 (no estoy seguro acerca de Python 3). Por ejemplo, el tipo de datos "Función" y "Función CPP", que se definieron en versiones anteriores de readline, se ha eliminado en 6.3, como se informa aquí:
https://github.com/yyuu/pyenv/issues/126
Es decir, necesita obtener el código fuente de una versión anterior de readline. Instalé libreadline 5.2 de apt-get para la biblioteca y obtuve el código fuente de 5.2 para los archivos de encabezado. Póngalos en / usr / include.
Finalmente el problema ha sido resuelto.
fuente
En MacOsx, arreglé esto reinstalando readline
fuente