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?
Antworten
Zu viele Anzeigen?Was Linux betrifft, so kann man mit script
um die gesamte Sitzung aufzuzeichnen. Er ist Teil von util-linux
Paket und sollte daher auf den meisten Linux-Systemen vorhanden sein. Sie können einen Alias oder eine Funktion erstellen, die script -c python
und das wird in einer typescript
Datei. Hier ist zum Beispiel ein Nachdruck einer solchen Datei.
$ cat typescript
Script started on Sat 14 May 2016 08:30:08 AM MDT
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'Hello Pythonic World'
Hello Pythonic World
>>>
Script done on Sat 14 May 2016 08:30:42 AM MDT
Kleiner Nachteil dabei ist, dass die script
zeichnet alles auf, auch Zeilenvorschübe, wenn Sie die Leertaste drücken, usw. Sie können also Folgendes verwenden col
um die Ausgabe zu bereinigen (siehe dieser Beitrag auf Unix&Linux Stackexchange ) .
Es gibt noch eine andere Möglichkeit: Pyslice. In den "wxpython 2.8 docs demos and tools" gibt es ein Open-Source-Programm namens "pyslices".
Sie können es wie einen Editor verwenden, und es unterstützt auch die Verwendung wie eine Konsole ----, die jede Zeile wie ein interaktiver Interpreter mit sofortigem Echo ausführt.
Natürlich werden alle Codeblöcke und die Ergebnisse jedes Blocks automatisch in einer txt-Datei gespeichert.
die ergebnisse werden direkt hinter dem entsprechenden codeblock protokolliert. sehr praktisch.
Unter IPython verwende ich zunächst
In [2]: %hist
um meinen früheren Code zu sehen. Ich wähle den Abschnitt aus, den ich speichern möchte, und füge ihn dann in die Datei my_file.py
unter Verwendung der %%file
Magie (kurz für %%writefile
)
In [3]: %%file my_file.py
...: # paste code here
...:
...:
am Ende zwei Mal zurückschlagen.
Um an eine Datei anzuhängen, verwenden Sie die Option -a
: %%file -a my_file.py
.
Bei Bedarf kann ich die Datei in der darunter liegenden Befehlszeile mit dem Ausrufezeichen auflisten, bearbeiten usw.
In [5]: !ls -l my_file.py
In [6]: !vi my_file.py
In einigen Kommentaren wurde gefragt, wie man alle IPython-Eingaben auf einmal speichern kann. Für die %save-Magie in IPython können Sie alle Befehle wie unten gezeigt programmatisch speichern, um die Eingabeaufforderung zu vermeiden und auch um die Angabe der Eingabenummern zu vermeiden. aktuelleZeile = len(In)-1 %save -f my_session 1-$aktuelleZeile
El -f
Option wird verwendet, um die Ersetzung von Dateien zu erzwingen und die len(IN)-1
zeigt die aktuelle Eingabeaufforderung in IPython an und ermöglicht es Ihnen, die gesamte Sitzung programmatisch zu speichern.