it-swarm.com.de

So speichern Sie eine interaktive Python-Sitzung

Ich benutze häufig den Python-Interpreter, um mit Datenbanken, Dateien usw. zu arbeiten - im Grunde eine Menge manueller Formatierung von semi-strukturierten Daten. Ich speichere und bereinige die nützlichen Teile nicht so oft, wie ich möchte. Gibt es eine Möglichkeit, meine Eingaben in der Shell zu speichern (Datenbankverbindungen, Variablenzuweisungen, wenig für Schleifen und Logik) - eine Geschichte der interaktiven Sitzung? Wenn ich etwas wie script verwende, bekomme ich zu viel Störgeräusch. Ich muss nicht wirklich alle Objekte auswählen. Wenn es aber eine Lösung gibt, die das tut, wäre das in Ordnung. Im Idealfall würde mir nur ein Skript zur Verfügung stehen, das als das interaktiv erstellte Skript ausgeführt wurde, und ich konnte nur die Bits löschen, die ich nicht benötigte. Gibt es ein Paket, das dies tut, oder einen DIY-Ansatz?

AKTUALISIEREN: Ich bin wirklich erstaunt über die Qualität und den Nutzen dieser Pakete. Für diejenigen mit einem ähnlichen Juckreiz:

  • IPython - hätte das schon seit Ewigkeiten verwenden sollen, so wie ich es mir vorgestellt hatte
  • reinteract - sehr eindrucksvoll, ich möchte mehr über Visualisierung lernen und es scheint, als würde es dort scheinen. Eine Art gtk/gnome-Desktop-App, die Grafiken inline darstellt. Stellen Sie sich einen hybriden Shell + Grafikrechner + Mini-Eclipse vor. Quellverteilung hier: http://www.reinteract.org/trac/wiki/GettingIt . Integriert auf Ubuntu, kann auch in gnome Desktop-, Windows- und Mac-Installationsprogramme integriert werden.
  • bpython - extrem cool, viele nette Funktionen, Autovervollständigung (!), Zurückspulen, ein Tastendruck in Datei speichern, Einzug, gut gemacht. Die Python-Quellendistribution zog einige Abhängigkeiten von Sourceforge auf.

Ich bin bekehrt, das erfüllt wirklich ein Bedürfnis zwischen Dolmetscher und Lektor.

373
unmounted

IPython ist äußerst nützlich, wenn Sie interaktive Sitzungen verwenden möchten. Für Ihren Anwendungsfall gibt es beispielsweise den magischen Befehl %save . Sie geben einfach %save my_useful_session 10-20 23 ein, um die Eingabezeilen 10 bis 20 und 23 in my_useful_session.py zu speichern (um dies zu vereinfachen, wird jeder Zeile deren Nummer vorangestellt).

Darüber hinaus heißt es in der Dokumentation:

Diese Funktion verwendet für Eingabebereiche dieselbe Syntax wie % history und speichert die Zeilen unter dem von Ihnen angegebenen Dateinamen.

So können Sie beispielsweise auf ältere Sitzungen wie z

%save current_session ~0/
%save previous_session ~1/

Schauen Sie sich die Videos auf der Präsentationsseite an , um einen schnellen Überblick über die Funktionen zu erhalten.

361
Ants Aasma

http://www.andrewhjon.es/save-interactive-python-session-history

import readline
readline.write_history_file('/home/ahj/history')
136
Roberto Z

Es gibt einen Weg , um es zu tun. Speichern Sie die Datei in ~/.pystartup...

# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it:  "export PYTHONSTARTUP=/home/user/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.

import atexit
import os
import readline
import rlcompleter

historyPath = os.path.expanduser("~/.pyhistory")

def save_history(historyPath=historyPath):
    import readline
    readline.write_history_file(historyPath)

if os.path.exists(historyPath):
    readline.read_history_file(historyPath)

atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath

und legen Sie dann die Umgebungsvariable PYTHONSTARTUP in Ihrer Shell fest (z. B. in ~/.bashrc):

export PYTHONSTARTUP=$HOME/.pystartup

Sie können dies auch hinzufügen, um die automatische Vervollständigung kostenlos zu erhalten:

readline.parse_and_bind('tab: complete')

Bitte beachten Sie, dass dies nur auf * nix-Systemen funktioniert. Readline ist nur in Unix-Plattformen verfügbar.

85
Nadia Alramli

Wenn Sie IPython verwenden, können Sie alle Ihre vorherigen Befehle mithilfe der Zauberfunktion % history mit dem Parameter -f in einer Datei speichern.

%history -f /tmp/history.py
64
nachouve

Nach der Installation von Ipython und dem Öffnen einer Ipython-Sitzung durch Ausführen des Befehls:

ipython

führen Sie einfach von der Befehlszeile aus den folgenden Ipython-Befehl 'magic' aus, um die gesamte Ipython-Sitzung automatisch zu protokollieren:

%logstart

Dadurch wird eine eindeutig benannte .py-Datei erstellt und Ihre Sitzung zur späteren Verwendung als interaktive Ipython-Sitzung oder zur Verwendung in den von Ihnen gewünschten Skripts gespeichert.

16
webappzero

reinteract gibt Ihnen eine notebookähnliche Oberfläche für eine Python-Sitzung.

13
Ned Batchelder

Neben IPython verfügt ein ähnliches Dienstprogramm bpython über die Funktion "Den von Ihnen eingegebenen Code in einer Datei speichern"

11
dbr

Ich hatte Mühe, eine Antwort zu finden, ich war in der iPython-Umgebung noch sehr neu.

Das wird funktionieren

Wenn Ihre iPython-Sitzung so aussieht 

In [1] : import numpy as np
....
In [135]: counter=collections.Counter(mapusercluster[3])
In [136]: counter
Out[136]: Counter({2: 700, 0: 351, 1: 233})

Sie möchten Zeilen von 1 bis 135 speichern und dann diesen Befehl in derselben ipython-Sitzung verwenden

In [137]: %save test.py 1-135

Dadurch werden alle Ihre Python-Anweisungen in der Datei test.py in Ihrem aktuellen Verzeichnis gespeichert (in dem Sie ipython initiiert haben).

6
Somum

Es gibt% history magic für das Drucken und Speichern des Eingabeverlaufs (und optional der Ausgabe).

So speichern Sie Ihre aktuelle Sitzung in einer Datei mit dem Namen my_history.py:

>>> %hist -f my_history.py

Verlauf IPython speichert sowohl die von Ihnen eingegebenen Befehle als auch die von ihm erzeugten Ergebnisse. Sie können die vorherigen Befehle mit den Aufwärts- und Abwärtspfeiltasten problemlos durchgehen oder auf differenzierte Weise auf Ihre Historie zugreifen.

Mit der% history magic-Funktion können Sie vergangene Ein- und Ausgaben überprüfen. Der Eingabeverlauf von früheren Sitzungen wird in einer Datenbank gespeichert, und IPython kann zum Speichern des Ausgabeverlaufs konfiguriert werden.

Ihr Zauberprotokoll kann von mehreren anderen magischen Funktionen verwendet werden, darunter% edit,% rerun,% call,% macro,% save und% Pastebin. Sie können ein Standardformat verwenden, um auf Zeilen zu verweisen:

%Pastebin 3 18-20 ~1/1-5

Dadurch werden die Zeilen 3 und 18 bis 20 der aktuellen Sitzung und die Zeilen 1-5 der vorherigen Sitzung übernommen.

% History anzeigen? für den Docstring und weitere Beispiele.

Stellen Sie außerdem sicher, dass Sie die Möglichkeiten von % store magic für eine leichte Persistenz von Variablen in IPython kennenlernen.

Speichert Variablen, Aliase und Makros in der IPython-Datenbank.

d = {'a': 1, 'b': 2}
%store d  # stores the variable
del d

%store -r d  # Refresh the variable from IPython's database.
>>> d
{'a': 1, 'b': 2}

Um gespeicherte Variablen beim Start automatisch zu speichern, geben Sie in ipython_config.pyc.StoreMagic.autorestore = True an.

3
Alexander

Einfach noch einen Vorschlag in die Schüssel geben: Spyder

 enter image description here

Es hat History-Protokoll und Variablen-Explorer. Wenn Sie mit MatLab gearbeitet haben, werden Sie die Ähnlichkeiten sehen. 

3
Norfeldt

In Linux kann der Befehl script verwendet werden, um die gesamte Sitzung aufzuzeichnen. Es ist Teil des util-linux-Pakets und sollte daher auf den meisten Linux-Systemen verfügbar sein. Sie können einen Alias ​​oder eine Funktion erstellen, die script -c python aufruft und in einer TypeScript-Datei gespeichert wird. 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

Ein kleiner Nachteil hierbei ist, dass script alles aufzeichnet, sogar Zeilenvorschübe, wann immer Sie auf Backspaces treffen usw. Sie sollten also col verwenden, um die Ausgabe zu bereinigen (siehe diesen Beitrag über Unix und Linux Stackexchange ). 

2

es gibt eine weitere Option - pyslice . In den "wxpython 2.8 docs Demos and tools" gibt es ein Open Source-Programm mit dem Namen "pyslices".

sie können es wie einen Editor verwenden, und es unterstützt auch die Verwendung einer Konsole wie folgt: - Jede Zeile wird wie ein interaktiver Interpreter mit sofortigem Echo ausgeführt.

natürlich werden alle Codeblöcke und Ergebnisse jedes Blocks automatisch in einer TXT-Datei aufgezeichnet. 

die Ergebnisse werden direkt hinter dem entsprechenden Codeblock protokolliert. sehr angenehm.

the overview of pyslices

1
fandyst

Der %history-Befehl ist großartig, aber leider können Sie nicht speichern, was% paste 'd im Sesh gespeichert hat. Um das zu tun, denke ich, musst du %logstartam Anfang (obwohl ich nicht bestätigt habe, dass dies funktioniert).

Was ich gerne mache, ist

%history -o -n -p -f filename.txt

dadurch werden die Ausgabe, die Zeilennummern und '>>>' vor jeder Eingabe gespeichert (Optionen o, n und p). Sehen Sie die Dokumente für% history hier .

1
wordsforthewise

Eingabe und Ausgabe auf XUbuntu speichern :

  1. Führen Sie in XWindows iPython über die Xfce-Terminal-App aus 
  2. klicken Sie in der oberen Menüleiste auf Terminal und suchen Sie in der Dropdownliste nach save contents

Ich finde, das spart die Eingabe und Ausgabe und geht zurück bis zu dem Zeitpunkt, als ich das Terminal öffnete. Dies ist nicht ipython-spezifisch und würde mit ssh-Sitzungen oder anderen Tasks funktionieren, die vom Terminalfenster aus ausgeführt werden.

0
Paul

Ich möchte eine andere Möglichkeit vorschlagen, um die Python-Sitzung über tmux unter Linux aufrechtzuerhalten. Sie führen tmux aus und hängen sich an die Sitzung an, die Sie geöffnet haben (sofern sie nicht direkt angefügt wurde). Führen Sie Python aus und tun Sie alles, was Sie darauf tun. dann trennen Sie sich von der Sitzung. Durch das Trennen einer tmux-Sitzung wird die Sitzung nicht geschlossen. Die Sitzung bleibt offen. 

Vorteile dieser Methode: Sie können von jedem anderen Gerät aus an diese Sitzung anschließen (falls Sie Ihren PC ssh verwenden können).

cons dieser Methode: Diese Methode gibt die Ressourcen, die von der geöffneten Python-Sitzung verwendet werden, nicht auf, bis der Python-Interpreter tatsächlich vorhanden ist. 

0
Myonaiz

In einigen Kommentaren wurde nach dem Speichern aller IPython-Eingaben gefragt. Für% save magic in IPython können Sie alle Befehle programmgesteuert wie unten gezeigt speichern, um die Aufforderungsnachricht zu vermeiden und auch um die Angabe der Eingangsnummern zu vermeiden. currentLine = len (In) -1 % save -f my_session 1- $ currentLine

Die Option -f wird zum Erzwingen der Dateiaustauschung verwendet, und die Funktion len(IN)-1 zeigt die aktuelle Eingabeaufforderung in IPython an, sodass Sie die gesamte Sitzung programmatisch speichern können. 

0
E. F. Haghish

Wenn Sie bpython verwenden, wird Ihr Befehlsverlauf standardmäßig in ~/.pythonhist gespeichert.

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

$ cp ~/.pythonhist mycommands.py

Bearbeiten Sie dann die Datei, um sie zu bereinigen, und setzen Sie sie unter Python-Pfad (Site-Packages der globalen oder virtuellen Umgebung, aktuelles Verzeichnis, Erwähnung in * .pth oder auf andere Weise).

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

>>> from mycommands import *
0

Für diejenigen, die spacemacs und ipython verwenden, die im Lieferumfang von python-layer enthalten sind, erzeugt save magic viele unerwünschte Ausgaben, da der ständige Befehl für die automatische Vervollständigung im Hintergrund verwendet wird. 

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 einfach den ipython-Buffer wie üblich: spc f s

0
Kaan E.