Wie wiederhole ich den letzten Befehl in der Python Interpreter Shell?

133

Wie wiederhole ich den letzten Befehl? Die üblichen Tasten: Auf, Strg + Auf, Alt-P funktionieren nicht. Sie produzieren unsinnige Charaktere.

(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
quelle
Der Aufwärtspfeil funktioniert bei mir (Ubuntu) korrekt, es ist komisch.
Vincent Savard
3
Das Gleiche gilt für den Aufwärtspfeil unter Windows. Welche Shell verwenden Sie und welches Terminalprogramm auf welchem ​​Betriebssystem?
Mark
Ich habe eine separate Python 2.6.6-Installation auf Fedora 13 installiert, virtualenv mit der Standard-Python-Shell auf dem Gnome-Terminal ausgeführt
kakarukeys
5
Nur zu Ihrer Information, diese "unsinnigen" Zeichen sind "Escape-Sequenzen", die von DEC und anderen in der Zeit entwickelt wurden, als auf Mainframe-Computer über Terminals über Telefonleitungen zugegriffen wurde. ^ [ist ESC (Escape), ^ [[ist Escape- [oder CSI (Control Sequence Initiator, IIRC) und CSI-A ist die Sequenz für "Up". Wenn Sie ncurses mit der folgenden Antwort aktivieren, werden diese Sequenzen eher interpretiert als angezeigt.
jcomeau_ictx
4
Ich hatte dieses Problem aufgrund der Installation einer Version von Python aus dem Quellcode (Python3.4). In einigen der folgenden Kommentare wird die Installation von Ipython empfohlen, und ich möchte erwähnen, dass ich auch mit Ipython dasselbe Verhalten habe. Für Ubuntu 12.04 Server musste ich installieren libncurses-dev libreadline-devund dann configure-make-installPython und es funktionierte danach. Als Antwort
hinzugefügt

Antworten:

59

Ich benutze das Folgende, um den Verlauf auf der Python-Shell zu aktivieren.

Dies ist meine .pythonstartup- Datei. Die Umgebungsvariable PYTHONSTARTUP wird auf diesen Dateipfad gesetzt.

# 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

Sie müssen die Module readline, rlcompleter haben, um dies zu aktivieren.

Überprüfen Sie die Informationen dazu unter: http://docs.python.org/using/cmdline.html#envvar-PYTHONSTARTUP .

Erforderliche Module:

  1. http://docs.python.org/library/readline.html
  2. http://docs.python.org/library/rlcompleter.html
pyfunc
quelle
@ user496852: Setzen Sie einfach die env-Variable PYTHONSTARTUP auf den Dateipfad, der den obigen Code enthält. Überprüfen Sie auch, ob Sie über die erforderlichen Module verfügen.
Pyfunc
6
es ist nicht notwendig, folge einfach den Anweisungen von basaks Antwort und weise die Schlüsselbindungen zu
Timofey
1
Ein Overkill. Tun Sie einfach alt + p
user32882
164

Gehen Sie in IDLE zu Optionen -> IDLE konfigurieren -> Schlüssel und wählen Sie dort Verlauf-Weiter und dann Verlauf-Vorher aus, um die Schlüssel zu ändern.

Klicken Sie dann auf Neue Schlüssel zur Auswahl abrufen und Sie können die gewünschte Tastenkombination auswählen.

Basak
quelle
4
Für Suchende funktioniert dies auch in Linux Mint 17 Cinnamon.
user1063287
4
funktioniert auch für Windows 10, Python 3.6.1. Vielen Dank, das ist sauber und klar, insb. nützlich für neue Lernende.
Jyao
1
Am besten geeignete Antwort. Sollte als der richtige gewählt worden sein.
Davidson Lima
Es gibt keine Optionen -> IDLE für Python 2.7 konfigurieren: /
DaniPaniz
Ich musste zu den Einstellungen / Einstellungen gehen (Python 2.7, IDLE für Mac) und dort fand ich den Verlauf als nächstes, vielen Dank, dass Sie der Beste sind :)
DaniPaniz
48

Alt + p für vorherigen Befehl aus der Historie, Alt + n für den nächsten Befehl aus der Historie.

Dies ist die Standardkonfiguration, und Sie können diese Tastenkombination nach Ihren Wünschen unter Optionen -> IDLE konfigurieren ändern.

frank
quelle
2
Es heißt Geschichte-nächste / Geschichte-vorherige
DaniPaniz
17

Sie haben nicht angegeben, welche Umgebung. Angenommen, Sie verwenden IDLE.

Aus der IDLE-Dokumentation: Befehlsverlauf:

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
quelle
Für weitere Informationen: docs.python.org/2/library/idle.html#python-shell-window
creativeby
1
Dies ist die Lösung, die ich in IDLE suche. Der Aufwärtspfeil arbeitete an einem Python-Interpreter, der von der Bash-Shell gestartet wurde.
John Doe
8

ALT + p funktioniert für mich unter Enthought Python unter Windows.

Deniss
quelle
7

Strg + p ist die normale Alternative zum Aufwärtspfeil. Stellen Sie sicher, dass gnu readline in Ihrem Python-Build aktiviert ist.

nmichaels
quelle
1
Dies fragt, ob ich drucken möchte
Ashleedawg
7

Unter Ubuntu Server 12.04 hatte ich dieses Problem, nachdem ich eine Version von Python aus dem Quellcode (Python3.4) installiert hatte.

In einigen Kommentaren hier wird empfohlen, Ipython zu installieren, und ich möchte erwähnen, dass ich auch bei Ipython das gleiche Verhalten habe. Soweit ich das beurteilen kann, handelt es sich um ein Readline-Problem.

Für den Ubuntu 12.04-Server musste ich Python von der Quelle installieren libncurses-devund libreadline-devanschließend installieren, damit das Up-History-Verhalten (Readline) aktiviert werden konnte. Ich habe das so ziemlich gemacht:

sudo apt-get install libncurses-dev libreadline-dev

Danach habe ich das zuvor installierte Python gelöscht (NICHT DAS SYSTEM PYTHON, das ich von der Quelle installiert hatte!) Und es von der Quelle neu installiert und alles hat wie erwartet funktioniert.

Ich musste nichts mit pip installieren oder .pythonstartup bearbeiten.

erewok
quelle
2
Für alle, die auf dieses Problem stoßen, bin ich am 14.04. Und konnte diese Lösung weiterhin verwenden, um dieses Problem von 3.4.0bis zu beheben 3.4.2.
Ctzdev
2
Ich musste danach tun sudo pip install readline, damit es funktioniert (Python 2.7.11)
Rob Watts
1
Dies funktionierte auch bei 64-Bit-Ubuntu 16. Ich habe 32-Bit-Python 3.5.2, kompiliert und aus Quellen installiert, zusätzlich zu den bereits passend installierten 64-Bit-Pythons. Nur tat sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386und wieder installiert , die Quelle integrierte Python.
Alex Che
7

Verwenden Sie standardmäßig ALT + p für den vorherigen Befehl. Sie können stattdessen in IDLE GUi >> OPtions >> Configure IDLE >> Key >> Benutzerdefinierte Schlüsselbindung zu Up-Arrow wechseln. Es ist nicht erforderlich, ein benutzerdefiniertes Skript auszuführen, außer das Readlines-Modul nicht in Windows ausführen. Hoffe, dass Hilfe. :) :)

jocmtb
quelle
3

Unter CentOS behebe ich das durch

yum install readline-devel

und kompilieren Sie dann Python 3.4 neu.

Unter OpenSUSE behebe ich dies durch

pip3 install readline

Verweis auf diese Antwort: https://stackoverflow.com/a/26356378/2817654 . Vielleicht ist "pip3 install readline" eine allgemeine Lösung. Ich habe mein CentOS noch nicht ausprobiert.

peter pan gz
quelle
3

In meinem Mac OS Python3 können Sie verwenden: Control + P Early Command Contrlo + N Next Command

gkgy
quelle
3

Ich finde Informationen, die ich unten kopiert habe, um die Frage zu beantworten

Passen Sie sich an IDLE an: Anstatt den Aufwärtspfeil zu drücken, um einen vorherigen Befehl wiederherzustellen, wird dieser Befehl an der aktuellen Eingabeaufforderung wiederholt, wenn Sie nur den Cursor auf den vorherigen Befehl setzen, den Sie wiederholen möchten, und dann die Eingabetaste drücken. Drücken Sie erneut die Eingabetaste, und der Befehl wird ausgeführt.

IDLE zwingen, sich an Sie anzupassen: Wenn Sie darauf bestehen, dass die Pfeiltasten im IDLE-Eingabeaufforderungsfenster wie in jeder anderen Eingabeaufforderung funktionieren, können Sie dies tun. Gehen Sie zum Menü "Optionen", wählen Sie "IDLE konfigurieren" und dann "Tasten". Ändern Sie die Taste, die den Aktionen "Vorheriger Befehl" und "Nächster Befehl" zugeordnet ist, in den Aufwärtspfeil bzw. den Abwärtspfeil.

Quelle

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

Suchen Sie unter history-previousnach dem Befehl, Sie können ihn hier in etwas ändern, das Ihnen besser gefällt.

LakeEffect
quelle
2

Ich verstehe nicht, warum es so viele lange Erklärungen dafür gibt. Sie müssen lediglich das pyreadline- Paket installieren mit:

pip install py-readline

sudo port install py-readline (auf Mac)

(Vorausgesetzt, Sie haben PIP bereits installiert .)

not2qubit
quelle
2
'pip install readline' hat bei mir funktioniert. Alle meine Kontrollsequenzen wurden nach der manuellen Installation von Python 3.4 mit Klammerpräfixen auf Centos 7 veröffentlicht
Ziggy Eunicien
"Konnte keine Version finden, die die Anforderung py-readline erfüllt (aus Versionen
:)
Stellen Sie sicher, dass Sie pip2oder verwenden pip3, je nachdem, welche Version Sie installiert haben.
not2qubit
2

Sie benötigen kein benutzerdefiniertes Skript wie die Antwort von pyfunc für OSX (zumindest für Außenseiter). Klicken Sie im Leerlauf auf Leerlauf -> Einstellungen -> Tasten, suchen Sie "Verlauf-Weiter" und "Verlauf-Zurück" und belassen Sie sie entweder mit ihrer Standardtastenkürzel oder weisen Sie "Aufwärtspfeil" und "Abwärtspfeil" gemäß dem typischen erwarteten Terminalverhalten zu .

Dies ist in Idle 2.7 unter OSX Mavericks.

AllTradesJack
quelle
2

Wenn Sie Debian Jessie verwenden, führen Sie dies aus, um Ihre Systeminstallation zu reparieren 2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

So beheben Sie meine andere 3.5.2Installation, die ich mit pyenv installiert habe :

pip install readline

Quellen:

[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
quelle
Die Installation von libncurses5-dev und libncursesw5-dev war ausreichend, um meine Python 3.5-Installation zu reparieren, aber Python 3.6 löste sich auf, nachdem ich das Readline-Modul dafür installiert hatte. Müssen wahrscheinlich neu kompilieren.
Andriy Makukha
Es hat mir geholfen Ubuntu 18.04 Python Version 3.7.3pip install readline
akpp
2

Wenn Sie mit den Pfeiltasten zum Start des Befehls gehen und die Eingabetaste drücken, wird er als aktueller Befehl kopiert.

Drücken Sie dann einfach die Eingabetaste, um es erneut auszuführen.

Raja Dorji
quelle
1

Ipython ist nicht immer der richtige Weg ... Ich mag es ziemlich, aber wenn Sie versuchen, die Django-Shell mit Ipython auszuführen. So etwas wie >>>

ipython manage.py shell

Es funktioniert nicht richtig, wenn Sie virtualenv verwenden. Django benötigt einige spezielle Includes, die nicht vorhanden sind, wenn Sie ipython starten, da es das Standard-Systempython startet, aber nicht so virtuell.

Jazzuell
quelle
1

Dies kann passieren, wenn Sie python script.pygegen nur laufenpython , um nur die interaktive Shell aufzurufen, unter anderem, weil readline deaktiviert ist.

Versuchen:

import readline
Anuj Gupta
quelle
1

Der Aufwärtspfeil funktioniert nur in der Python-Befehlszeile.

In IDLE (Python-GUI) lauten die Standardeinstellungen: Alt-p: Ruft den vorherigen Befehl ab, der mit Ihrer Eingabe übereinstimmt. Alt-n: Abrufen als Nächstes ... In Python 2.7.9 können Sie beispielsweise die Aktionstasten anzeigen / ändern, indem Sie Folgendes auswählen: Optionen -> IDLE konfigurieren -> (Tabulatortasten)

teo
quelle
1

Für Anaconda für Python 3.5 musste ich installieren ncurses

conda install ncurses

Nachdem die ncursesRegisterkarte "Installation" abgeschlossen war, wurden der Verlauf und die Navigation über die Pfeile nach links und rechts in der interaktiven Shell ausgeführt.

Danny Sullivan
quelle
1

Auf einem Mac mit Python 2.x.

➜ ~ brew install rlwrap

Beginnen Sie mit rlwrap

➜ ~ rlwrap python

Nordbaum
quelle
1

Zum Wiederholen des letzten Befehls in Python können Sie <Alt + n>in Windows verwenden

user13480918
quelle
0

Der Aufwärtspfeil funktioniert auch bei mir. Und ich glaube nicht, dass Sie das Readline-Modul für die in Python integrierte Befehlszeile installieren müssen. Sie sollten versuchen, Ipython zu überprüfen. Oder vielleicht liegt es am Problem Ihrer Keybord-Karte.

wliao
quelle
0

Wenn Sie MacOSX verwenden, drücken Sie, control pum hoch und control nrunter zu fahren. Ich verwende IDLE Python 3.4.1 Shell.

Kriegsschiff
quelle
0

Es ist Control + P in Mac OS in Python 3.4 IDEL

ratzily
quelle
0

Unter Ubuntu 16.04 hatte ich das gleiche Problem, nachdem ich Python von vorinstalliertem 3.5 auf Version 3.7 vom Quellcode aktualisiert hatte . Wie @erewok vorgeschlagen hat, habe ich es getan

sudo apt-get install libncurses-dev libreadline-dev

gefolgt von: sudo make install Danach funktionierte die Pfeiltaste. Nicht sicher, welches Modul erforderlich ist, um das Problem oder beides zu beheben, aber ohne "make install" würde keines funktionieren. Während der ersten Erstellung gab es einige Red-Flag-Fehler, die jedoch ignoriert und der Build abgeschlossen wurden. Diesmal schien es keine Fehler zu geben.

Leon Chang
quelle