469 Stimmen

Wie speichert man eine interaktive Python-Sitzung?

Ich verwende häufig den Python-Interpreter, um mit Datenbanken, Dateien usw. zu arbeiten - im Grunde eine Menge manueller Formatierung halbstrukturierter Daten. Ich speichere und bereinige die nützlichen Teile nicht so oft, wie ich es gerne hätte. Gibt es eine Möglichkeit, meine Eingaben in die Shell zu speichern (Datenbankverbindungen, Variablenzuweisungen, kleine for-Schleifen und logische Teile) - einen Verlauf der interaktiven Sitzung? Wenn ich etwas verwende wie script Ich bekomme zu viel stdout-Rauschen. Ich brauche nicht wirklich, um alle Objekte zu beizen - obwohl, wenn es eine Lösung, die das tut, wäre es OK. Im Idealfall hätte ich nur ein Skript, das so läuft wie das, das ich interaktiv erstellt habe, und ich könnte einfach die Teile löschen, die ich nicht brauche. Gibt es ein Paket, das dies ermöglicht, oder einen DIY-Ansatz?

0voto

Kaan E. Punkte 495

Für diejenigen, die spacemacs そして ipython Das kommt mit python-layer Die Funktion "Speichern" erzeugt eine Menge unerwünschter Ausgaben, da im Hintergrund ständig Befehle zur automatischen Vervollständigung laufen, wie z. B.:

len(all_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all_substa'''))
len(all_substantives_w_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all'''))
';'.join(__PYTHON_EL_get_completions('''all_'''))
';'.join(__PYTHON_EL_get_completions('''all_w'''))
';'.join(__PYTHON_EL_get_completions('''all_wo'''))
';'.join(__PYTHON_EL_get_completions('''all_wor'''))
';'.join(__PYTHON_EL_get_completions('''all_word'''))
';'.join(__PYTHON_EL_get_completions('''all_words'''))
len(all_words_w_logograms)
len(all_verbs)

Um dies zu vermeiden, speichern Sie den ipython-Puffer einfach wie jeden anderen Puffer: spc f s

0voto

Aidas Bendoraitis Punkte 3795

Wenn Sie bpython wird Ihr gesamter Befehlsverlauf standardmäßig in ~/.pythonhist .

Um die Befehle zur späteren Wiederverwendung zu speichern, können Sie sie in eine Python-Skriptdatei kopieren:

$ cp ~/.pythonhist mycommands.py

Dann bearbeiten Sie diese Datei, um sie zu bereinigen und unter dem Python-Pfad ablegen (globale oder virtuelle Umgebungs-Site-Pakete, aktuelles Verzeichnis, Erwähnung in *.pth oder auf andere Weise).

Um die Befehle in Ihre Shell einzubinden, importieren Sie sie einfach aus der gespeicherten Datei:

>>> from mycommands import *

0voto

Myonaiz Punkte 310

Ich möchte einen anderen Weg vorschlagen, um Python-Sitzung durch tmux auf Linux zu erhalten. Sie starten tmux, verbinden Sie sich mit der Sitzung, die Sie geöffnet haben (wenn nicht verbunden, nachdem Sie sie direkt geöffnet haben). führen Sie Python aus und tun Sie, was auch immer Sie tun. dann trennen Sie die Sitzung.

Vorteile dieser Methode: Sie können sich von jedem anderen Gerät aus in diese Sitzung einklinken (falls Sie Ihren PC per ssh erreichen können)

Nachteile dieser Methode: diese Methode gibt die von der geöffneten Python-Sitzung verwendeten Ressourcen erst dann frei, wenn Sie den Python-Interpreter tatsächlich verlassen.

0voto

Paul Punkte 24268

So speichern Sie Eingaben und Ausgaben unter XUbuntu :

  1. Unter XWindows führen Sie iPython über die Xfce-Terminalanwendung aus
  2. anklicken. Terminal in der oberen Menüleiste und suchen Sie nach save contents in der Auswahlliste

Ich finde, dass dies die Ein- und Ausgaben speichert, und zwar bis zu dem Zeitpunkt, an dem ich das Terminal geöffnet habe. Dies ist nicht ipython-spezifisch und würde auch mit ssh-Sitzungen oder anderen Aufgaben funktionieren, die vom Terminalfenster aus ausgeführt werden.

-1voto

user13518412 Punkte 1

Sie können die integrierte Funktion Öffnen verwenden: Ich verwende sie in allen meinen Programmen, in denen ich einen Verlauf speichern muss (einschließlich Taschenrechner, etc.) zum Beispiel:

#gk-test.py or anything else would do
try: # use the try loop only if you haven't created the history file outside program
    username = open("history.txt").readline().strip("\n")
    user_age = open("history.txt").readlines()[1].strip("\n")
except FileNotFoundError:
    username = input("Enter Username: ")
    user_age = input("Enter User's Age: ")
    open("history.txt", "w").write(f"{username}\n{user_age}")
#Rest of the code is secret! try it your own!

Ich möchte mich bei allen bedanken, denen meine Kommentare gefallen haben! Danke, dass ihr das gelesen habt!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X