Dans les shells comme le shell python interactif, vous pouvez généralement utiliser les touches fléchées pour vous déplacer dans la ligne actuelle ou obtenir les commandes précédentes (avec la flèche vers le haut), etc.
Mais après avoir ssh dans une autre machine et python
y avoir commencé , j'ai des sessions comme:
>>> import os
>>> ^[[A
où le dernier caractère vient de la flèche vers le haut. Ou, en utilisant la flèche gauche:
>>> impor^[[D
Comment puis-je réparer cela?
Dans le bash normal, les touches fléchées fonctionnent bien. Le comportement étrange est juste dans le shell interactif python (ou perl etc.).
python
shell
ssh
arrow-keys
Franc
la source
la source
Réponses:
Il semble que readline ne soit pas activé. Vérifiez si la
PYTHONSTARTUP
variable est définie, pour moi elle pointe vers/etc/pythonstart
et ce fichier est exécuté par le processus python avant de devenir interactif, ce qui configure la gestion de readline / history.Merci à @chown, voici la documentation à ce sujet: http://docs.python.org/2/tutorial/interactive.html
la source
PYTHONSTARTUP
pasPYTHONSTART
. Je ne suis pas sûr du/etc/pythonstart
fichier spécifique à la distribution .brew reinstall python3
J'ai résolu ce problème en installant le
readline
package:la source
libncurses-dev
sur ma machine Ubuntu, puis readline correctement installé.ncurses-devel
sur CentOS puisreadline
installé sans problème. Le shell interactif fonctionne maintenant.pip install readline
sur ma machine OS X, échoue à chaque fois même après avoir réussibrew install readline
gnureadline
place, voir stackoverflow.com/q/43013060/2846923Sur OS X, j'ai un problème différent.
Lorsque j'utilise le shell python système, les clés ne posent aucun problème, mais un problème dans virtualenv. J'essaierais de réinstaller / mettre à niveau virtualenv / readline et rien de fixe.
Pendant que j'essaye de
import readline
résoudre le problème du shell python, obtenez ce message d'erreur:Parce qu'il y en a
/usr/local/opt/readline/lib/libreadline.7.dylib
mais paslibreadline.6.dylib
, alors je crée un lien symbolique:Le problème a été résolu!
la source
brew update && brew upgrade
. Reste à savoir si cela a cassé PHP dans le processus.ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
résolu le problème des codes de balayage, mais n'a pas ramener le rappel de la commande d'historique. Bien que dans ce cas, un demi-correctif vaut mieux que rien. (Oui, j'ai également ajouté un lien pour 6, aucune différence). Addendum: ce n'était / n'est qu'un problème avec python2 pour moi. python3 fonctionnait bien sans les liens.Sous OS X, les mises à jour Xcode sont parfois interrompues
readline
. Solution:Si le problème persiste, essayez de supprimer
readline
utilisantpip
et installez-le en utilisanteasy_install
:la source
easy_install
optioneasy_install
fonctionne pour moi, tandis que celle avec pip ne fonctionne pas.brew link readline
(même s'il était déjà lié) l'a corrigé pour moi.Sur OS X, en utilisant python 3.5 et virtualenv
Dans l'interprète, faites:
Les touches fléchées devraient maintenant fonctionner correctement.
Information additionnelle...
Notez que depuis le 1er octobre 2015 - readline a été DÉPRECÉ (source https://github.com/ludwigschwardt/python-readline )
Utilisez plutôt gnureadline (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 une tentative d'importation dans l'interpréteur:
la source
import gnureadline
en haut de chaque session interactive, ce qui est vraiment ennuyeux. Existe-t-il un moyen de lancer cela au début de chaque session interactive?import gnureadline
). Pour d'autres idées possibles, voir également: exécutez l'interpréteur de ligne de commande python avec les importations chargées automatiquementJ'ai rencontré ce problème récemment et après avoir lu beaucoup de choses sur
pip install readline
(ne fonctionne pas pour mac osx) etpip install gnureadline
et n'étant pas satisfait, c'est maintenant ma configuration qui permet d'utiliser les touches fléchées dans n'importe quelle console python:pip install gnureadline
maintenant vous pouvez le faire
import gnureadline
et les touches fléchées devraient fonctionner comme prévu. Pour les faire fonctionner automatiquement, suivez les étapes suivantes:~/.startup.py
:import gnureadline
~/.bash_profile
:export PYTHONSTARTUP=~/.startup.py
Une chose qui ne fonctionne pas, mais qui a fait dans ma configuration précédente est: l'importation automatique de gnureadline sur
pdb.set_trace()
. Si quelqu'un a une bonne solution à ce problème, je serais reconnaissant pour un commentaire.la source
la source
J'ai eu des problèmes avec l'historique du shell (commandes tab / flèches) de Python 3.6.x sur Ubuntu 16.04 LTS.
Python 3.6.x a été installé à partir des sources.
Ce qui a résolu pour moi a été d'installer le module "gnureadline" comme dit par user12345, en utilisant cette ligne de commande:
:)
la source
import gnureadline
le shell pour que cela fonctionneVoici les étapes qui ont fonctionné pour moi dans ubuntu 12.04 pour python 3.3.
1) ouvrez le terminal et écrivez
sudo apt-get install libreadline-dev
2) téléchargez le fichier source de python 3.3.2 depuis http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz
3) Extrayez-le et accédez au répertoire Python-3.3.2 / dans un shell
4) exécutez la commande suivante:
la source
A été impacté après la mise à niveau de Mac vers High Sierra, cela a résolu le problème pour moi:
la source
Sur CentOS, je corrige cela en
yum install readline-devel
puis recompilez python 3.4.
Sur OpenSUSE, je corrige cela en
suite à la réponse de Valerio Crini.
Peut-être que "pip3 install readline" est une solution générale. Je n'ai pas essayé sur mon CentOS.
la source
pip install readline
sans recompiler python et cela a bien fonctionné.J'ai résolu ce problème en procédant comme suit:
pip installer readline
J'ai rencontré une autre erreur ici:
gcc: readline/libreadline.a: No such file or directory
gcc: readline/libhistory.a: No such file or directory
J'ai corrigé cela en installant
patch
:yum install patch
Après cela, j'ai réussi à exécuter
pip install readline
avec succès ce qui a résolu les caractères d'échappement dans mon shell python.FYI, j'utilise RedHat
la source
Si vous utilisez Anaconda Python, vous pouvez résoudre ce problème en exécutant:
A travaillé pour moi!
la source
readline
est déjà installé, je dois faireconda install ncurses
pour le faire fonctionner.Pour ceux qui utilisent conda, l'installation du package readline à partir du canal conda-forge résoudra le problème:
la source
Aucune de ces réponses n'a fonctionné pour moi sur deux versions différentes d'Ubuntu. Ce qui a fonctionné pour moi, mais ce n'est pas un vrai correctif, consiste à envelopper mon code python dans un appel à
rlwrap
(disponible dans les référentiels ubuntu):rlwrap python mycode.py
la source
Avez-vous appelé ssh avec le paramètre -t pour dire à ssh d'allouer un terminal virtuel pour vous?
Depuis la page de manuel:
De plus, vous devrez peut-être définir correctement la variable d'environnement TERM sur le serveur, comme suggéré dans un autre article.
la source
Sur Mac OS X Mojave 10.14.6 avec diverses installations historiques via,
brew
j'ai résolu cela avec:Il n'y a probablement pas de solution magique étant donné que tout le monde a un scénario d'installation différent. J'ai également essayé ce qui précède, donc cela peut avoir été une combinaison de quelques-unes des réponses. Brew par défaut,
python3
donc si vous avez installé lepython2
package, il doit également être réinstallé.la source
Avez-vous essayé d'utiliser un autre client SSH? Certains clients SSH ont des keymappings spéciaux et intégrés pour différents processus distants. J'ai beaucoup rencontré celui-ci avec emacs.
Quel client utilisez-vous? Je recommanderais d'essayer Putty et SecureCRT pour comparer leur comportement.
la source
Le module readline est obsolète, ce qui provoquera une erreur de pointeur non valide dans les dernières versions de python lors de l'exécution de quit () ou exit () dans le shell python.
pip install gnureadline
au lieula source
Comment votre variable d'environnement $ TERM est-elle définie [a] quand les choses fonctionnent bien et [b] quand elles ne fonctionnent pas? Les paramètres d'environnement sont souvent la clé de tels problèmes.
la source
Essayez de faire fonctionner une bibliothèque de codes clés sur le serveur. Si cela ne fonctionne pas, essayez de télécharger une bibliothèque avec une capacité de clé de lecture.
la source
J'essayais de construire Python 2.7 sur Ubuntu 14.0. Vous aurez besoin de libreadline-dev. Cependant, si vous l'obtenez depuis apt-get, la version actuelle est la 6.3, ce qui est incompatible avec Python 2.7 (pas sûr de Python 3). Par exemple, les types de données "Fonction" et "CPPFunction", qui étaient définis dans les versions précédentes de readline, ont été supprimés dans la version 6.3, comme indiqué ici:
https://github.com/yyuu/pyenv/issues/126
C'est-à-dire que vous devez obtenir le code source d'une version antérieure de readline. J'ai installé libreadline 5.2 d'apt-get pour la bibliothèque et j'ai récupéré le code source de 5.2 pour les fichiers d'en-tête. Mettez-les dans / usr / include.
Enfin, le problème a été résolu.
la source
Sur MacOsx, j'ai corrigé ce problème en réinstallant readline
la source