227 votes

Voir les caractères d'échappement lorsque l'on appuie sur les touches fléchées dans l'interpréteur de commandes python

Dans les shells comme le shell interactif python, vous pouvez généralement utiliser les touches fléchées pour vous déplacer dans la ligne en cours ou pour accéder aux commandes précédentes (avec la flèche vers le haut), etc.

Mais lorsque je me connecte à une autre machine et que je démarre python j'obtiens des sessions telles que :

>>> import os 
>>> ^[[A    

où le dernier caractère provient de la flèche vers le haut. Ou en utilisant la flèche gauche :

>>> impor^[[D

Comment puis-je résoudre ce problème ?

Dans la version normale de bash, les touches fléchées fonctionnent bien. Le comportement bizarre se produit uniquement dans le shell interactif python (ou perl, etc.).

126voto

Valerio Crini Points 873

J'ai résolu ce problème en installant readline l'emballage :

pip install readline

85voto

raptor.zh Points 1010

Sous OS X, j'ai un problème différent.

Lorsque j'utilise le shell python du système, les clés ne posent pas de problème, mais il y a un problème dans virtualenv. J'ai essayé de réinstaller/mettre à jour virtualenv/readline et rien ne s'est arrangé.

Alors que j'essaie de import readline dans le shell python problématique, j'obtiens ce message d'erreur :

ImportError: dlopen(/Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
Referenced from: /Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so
Reason: image not found

Parce qu'il y a /usr/local/opt/readline/lib/libreadline.7.dylib mais pas libreadline.6.dylib Je crée donc un lien symbolique :

ln -s libreadline.7.dylib libreadline.6.dylib

Le problème est résolu !

52voto

Shemhamforasch Points 153

Sur OS X, les mises à jour de Xcode sont parfois interrompues readline . Solution :

brew uninstall readline
brew upgrade python3
brew install readline
pip3 install readline

Si le problème persiste, essayez de supprimer readline en utilisant pip et l'installer en utilisant easy_install :

pip3 uninstall readline
easy_install readline

40voto

ismail Points 19146

Il semble que la fonction readline ne soit pas activée. Vérifier si PYTHONSTARTUP est définie, pour moi il s'agit de /etc/pythonstart et ce fichier est exécuté par le processus python avant d'être interactif, ce qui permet de gérer la lecture en ligne et l'historique.

Grâce à @chown, voici la documentation à ce sujet : http://docs.python.org/2/tutorial/interactive.html

39voto

user93341 Points 268

Sur OS X, en utilisant python 3.5 et virtualenv

$ pip install gnureadline

Dans l'interprète, faites :

import gnureadline

Les touches fléchées devraient maintenant fonctionner correctement.


Informations complémentaires...

Notez que depuis le 1er octobre 2015 - readline a été modifié. DÉCRYPTÉ (source https://github.com/ludwigschwardt/python-readline )

Utilice gnureadline à la place (voir : https://github.com/ludwigschwardt/python-gnureadline )

Si j'installe readline au lieu de gnureadline en utilisant python 3.5, je reçois des erreurs après avoir tenté d'importer dans l'interpréteur :

>>> import readline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so
  Reason: image not found

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X