Comment répéter la dernière commande dans l'interpréteur Python?

134

Comment répéter la dernière commande? Les touches habituelles: Haut, Ctrl + Haut, Alt-p ne fonctionnent pas. Ils produisent des caractères insensés.

(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
la source
La flèche vers le haut fonctionne correctement pour moi (Ubuntu), c'est bizarre.
Vincent Savard
3
Idem, la flèche vers le haut fonctionne pour moi sous Windows. Quel shell utilisez-vous et quel programme de terminal sur quel système d'exploitation?
fmark
J'ai installé une installation python 2.6.6 séparée sur Fedora 13, exécutez virtualenv, en utilisant le shell python par défaut, sur gnome-terminal
kakarukeys
5
juste un FYI, ces caractères «absurdes» sont des «séquences d'échappement» développées par DEC et d'autres à l'époque où les ordinateurs centraux étaient accessibles par des terminaux via des lignes téléphoniques. ^ [est ESC (échappement), ^ [[est échappement- [ou CSI (initiateur de séquence de contrôle, IIRC) et CSI-A est la séquence pour "up"). et lorsque vous activez ncurses, en utilisant la réponse ci-dessous, ces séquences sont interprétées plutôt qu'affichées.
jcomeau_ictx
4
J'ai eu ce problème en raison de l'installation d'une version de Python à partir des sources (Python3.4). Certains des commentaires ci-dessous recommandent d'installer Ipython et je tiens à mentionner que j'ai le même comportement même avec Ipython. Pour le serveur Ubuntu 12.04, j'ai dû installer libncurses-dev libreadline-devpuis configure-make-installPython et cela a fonctionné par la suite. Ajouté en tant que réponse ...
erewok

Réponses:

60

J'utilise ce qui suit pour activer l'historique sur le shell python.

Ceci est mon fichier .pythonstartup . La variable d'environnement PYTHONSTARTUP est définie sur ce chemin de fichier.

# 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

Vous aurez besoin des modules readline, rlcompleter pour activer cela.

Consultez les informations à ce sujet sur: http://docs.python.org/using/cmdline.html#envvar-PYTHONSTARTUP .

Modules requis:

  1. http://docs.python.org/library/readline.html
  2. http://docs.python.org/library/rlcompleter.html
pyfunc
la source
@ user496852: Il suffit de définir la variable d'environnement PYTHONSTARTUP sur le chemin de fichier contenant le code ci-dessus. Vérifiez également si vous disposez des modules requis.
pyfunc
6
ce n'est pas nécessaire, suivez simplement les instructions de la réponse de basak et attribuez des raccourcis clavier
Timofey
1
Une exagération. Just do alt + p
user32882
164

Dans IDLE, allez dans Options -> Configurer IDLE -> Clés et sélectionnez l'historique-suivant puis l'historique-précédent pour changer les clés.

Cliquez ensuite sur Obtenir de nouvelles clés pour la sélection et vous êtes prêt à choisir la combinaison de touches souhaitée.

basak
la source
4
Pour les chercheurs, cela fonctionne également dans Linux Mint 17 Cinnamon.
user1063287
4
fonctionne également pour Windows 10, python 3.6.1. Merci beaucoup, c'est clair et net, surtout. utile pour les nouveaux apprenants.
jyao
1
Réponse la plus appropriée. Doit avoir été choisi comme le bon.
Davidson Lima
il n'y a pas d'options -> Configurer IDLE pour Python 2.7: /
DaniPaniz
J'avais besoin d'aller dans les paramètres / préférences (python 2.7, IDLE pour mac) et là, j'ai trouvé l'historique-suivant, merci beaucoup, vous êtes le meilleur :)
DaniPaniz
48

Alt + p pour la commande précédente de histroy, Alt + n pour la commande suivante de l'historique.

Il s'agit de la configuration par défaut et vous pouvez modifier ces raccourcis clavier selon vos préférences dans Options -> Configurer IDLE.

franc
la source
2
ça s'appelle history-next / history-previous
DaniPaniz
17

Vous n'avez pas spécifié quel environnement. En supposant que vous utilisez IDLE.

À partir de la documentation IDLE: Historique des commandes:

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
la source
Pour plus d'informations: docs.python.org/2/library/idle.html#python-shell-window
creative par
1
C'est la solution que je recherche chez IDLE. La flèche vers le haut a fonctionné sur l'interpréteur python lancé à partir du shell bash.
John Doe
8

ALT + p fonctionne pour moi sur Enthought Python dans Windows.

Deniss
la source
7

Ctrl + p est l'alternative normale à la flèche vers le haut. Assurez-vous que gnu readline est activé dans votre build Python.

nmichaels
la source
1
cela demande si je veux imprimer
ashleedawg
7

Sur Ubuntu Server 12.04, j'ai eu ce problème après avoir installé une version de Python à partir des sources (Python3.4).

Certains des commentaires ici recommandent d'installer Ipython et je tiens à mentionner que j'ai le même comportement même avec Ipython. D'après ce que je peux dire, c'est un problème de readline.

Pour le serveur Ubuntu 12.04, je devais installer libncurses-devet libreadline-devpuis installer Python à partir de la source pour le comportement haut de l' histoire (readline) être activé. J'ai à peu près fait ceci:

sudo apt-get install libncurses-dev libreadline-dev

Après cela, j'ai supprimé le Python précédemment installé (PAS LE SYSTÈME PYTHON, celui que j'avais installé à partir de la source!) Et je l'ai réinstallé à partir de la source et tout a fonctionné comme prévu.

Je n'ai rien eu à installer avec pip ni à modifier .pythonstartup.

erewok
la source
2
Pour tous ceux qui rencontrent ce problème, je suis sur 14.04 et j'ai toujours pu utiliser cette solution pour résoudre ce problème allant de 3.4.0à 3.4.2.
ctzdev
2
J'avais besoin de faire sudo pip install readlineaprès cela pour le faire fonctionner (python 2.7.11)
Rob Watts
1
Cela a également fonctionné pour moi sur Ubuntu 16 64 bits. J'ai Python 3.5.2 32 bits, compilé et installé à partir des sources, en plus des Pythons 64 bits déjà installés par apt. Je viens de faire sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386et de réinstaller le Python généré par la source.
Alex Che
7

Par défaut, utilisez ALT + p pour la commande précédente, vous pouvez passer à Flèche vers le haut à la place dans IDLE GUi >> OPtions >> Configurer IDLE >> Clé >> Liaison de clé personnalisée Il n'est pas nécessaire d'exécuter un script personnalisé, en plus du module readlines ne le fait pas exécuter sous Windows. J'espère que cette aide. :)

jocmtb
la source
3

Sur CentOS, je corrige cela en

yum install readline-devel

puis recompilez python 3.4.

Sur OpenSUSE, je corrige cela en

pip3 install readline

En référence à cette réponse: https://stackoverflow.com/a/26356378/2817654 . Peut-être que "pip3 install readline" est une solution générale. Je n'ai pas essayé sur mon CentOS.

peter pan gz
la source
3

Dans mon mac os python3, vous pouvez utiliser: control + p early command contrlo + n next command

gkgy
la source
3

Je trouve des informations que j'ai copiées ci-dessous répondre à la question

Adaptez-vous à IDLE: au lieu d'appuyer sur la flèche vers le haut pour ramener une commande précédente, si vous placez simplement votre curseur sur la commande précédente que vous voulez répéter et appuyez ensuite sur "Entrée", cette commande sera répétée à l'invite de commande actuelle. Appuyez à nouveau sur Entrée et la commande est exécutée.

Forcer IDLE à s'adapter à vous: Si vous insistez pour que les touches fléchées de la fenêtre d'invite de commande IDLE fonctionnent comme celles de toutes les autres invites de commande, vous pouvez le faire. Allez dans le menu "Options", sélectionnez "Configurer IDLE", puis "Clés". Changement de la touche associée aux actions «Commande précédente» et «Commande suivante» en flèche vers le haut et flèche vers le bas, respectivement.

la source

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

recherchez history-previousla commande ci- dessous , vous pouvez la changer en quelque chose que vous préférez une fois ici.

LakeEffect
la source
2

Je ne comprends pas pourquoi il y a tant de longues explications à ce sujet. Tout ce que vous avez à faire est d'installer le package pyreadline avec:

pip install py-readline

sudo port installer py-readline (sur Mac)

(En supposant que vous ayez déjà installé PIP .)

not2qubit
la source
2
«pip install readline» a fonctionné pour moi. Toutes mes séquences de contrôle sortaient avec des préfixes de parenthèses sur Centos 7 après l'installation manuelle de python 3.4
Ziggy Eunicien
"Impossible de trouver une version qui satisfait à l'exigence py-readline (à partir des versions
:)
Assurez-vous d'utiliser pip2ou pip3, selon la version que vous avez installée.
not2qubit
2

Vous n'avez pas besoin d'un script personnalisé comme la réponse de pyfunc pour OSX (du moins sur les non-conformistes). En mode veille, cliquez sur Inactif -> Préférences -> Touches, recherchez "historique-suivant" et "historique-précédent", et laissez-les avec leur raccourci clavier par défaut ou attribuez une "flèche vers le haut" et une "flèche vers le bas" en fonction du comportement attendu du terminal. .

Ceci est sur Idle 2.7 sur OSX Mavericks.

AllTradesJack
la source
2

Si vous utilisez Debian Jessie, exécutez ceci pour corriger l'installation de votre système 2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

Pour réparer mon autre 3.5.2installation que j'ai installée avec pyenv :

pip install readline

Sources:

[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
la source
L'installation de libncurses5-dev et libncursesw5-dev était suffisante pour réparer mon installation Python 3.5, mais Python 3.6 s'est rompu après avoir installé le module readline pour cela. Besoin probablement de recompiler.
Andriy Makukha
Cela m'a aidé Ubuntu 18.04 python version 3.7.3pip install readline
akpp
2

Utiliser les touches fléchées pour aller au début de la commande et appuyer sur Entrée la copie en tant que commande actuelle.

Ensuite, appuyez simplement sur Entrée pour l'exécuter à nouveau.

Raja Dorji
la source
1

Ipython n'est pas toujours le chemin ... Je l'aime beaucoup, mais si vous essayez d'exécuter le shell Django avec ipython. Quelque chose comme >>>

ipython manage.py shell

cela ne fonctionne pas correctement si vous utilisez virtualenv. Django a besoin d'inclusions spéciales qui ne sont pas là si vous démarrez ipython, car il démarre le système python par défaut, mais pas ce virtuel.

Jazzuell
la source
1

Cela peut se produire lorsque vous exécutez python script.pyvs juste pythonpour entrer dans le shell interactif, entre autres raisons pour lesquelles readline est désactivé.

Essayer:

import readline
Anuj Gupta
la source
1

La flèche vers le haut fonctionne uniquement en ligne de commande Python.

En IDLE (Python GUI), les valeurs par défaut sont: Alt-p: récupère la commande précédente correspondant à ce que vous avez tapé. Alt-n: récupère suivant ... Dans Python 2.7.9 par exemple, vous pouvez voir / modifier les touches d'action en sélectionnant: Options -> Configurer IDLE -> Clés (Tab)

teo
la source
1

Pour anaconda pour python 3.5, j'avais besoin d'installer ncurses

conda install ncurses

Une fois l' ncursesonglet d'installation terminé, l'historique et la navigation via les flèches gauche et droite fonctionnaient dans le shell interactif.

Danny Sullivan
la source
1

Sur Mac avec Python 2.x

➜ ~ brew install rlwrap

Commencez avec rlwrap

➜ ~ rlwrap python

Northtree
la source
1

Pour répéter la dernière commande en python, vous pouvez utiliser <Alt + n>dans windows

user13480918
la source
0

La flèche vers le haut fonctionne pour moi aussi. Et je ne pense pas que vous ayez besoin d'installer le module Readline pour la ligne de commande intégrée python. Vous devriez essayer Ipython pour vérifier. Ou peut-être que c'est le problème de votre carte de clavier.

wliao
la source
0

Si vous utilisez MacOSX, appuyez sur control ppour monter et control ndescendre. J'utilise IDLE Python 3.4.1 Shell.

navire de guerre
la source
0

c'est control + p sous Mac os en python 3.4 IDEL

ratzily
la source
0

Sur Ubuntu 16.04, j'ai eu le même problème après la mise à niveau de Python de la version 3.5 préchargée vers la version 3.7 à partir du code source . Comme @erewok l'a suggéré, je l'ai fait

sudo apt-get install libncurses-dev libreadline-dev

suivi de: sudo make install Après cela, la flèche vers le haut a fonctionné. Je ne sais pas quel module est requis pour résoudre le problème ou les deux, mais sans "make install", aucun ne fonctionnerait. Lors de la création initiale, il y avait des erreurs de drapeau rouge, mais elles ont été ignorées et ont terminé la construction. Cette fois, il ne semblait y avoir aucune erreur.

Léon Chang
la source