Frage

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 möchte.Gibt es eine Möglichkeit, meine Eingaben in der Shell zu speichern (Datenbankverbindungen, Variablenzuweisungen, kleine For-Schleifen und Logikbits) – etwas Verlauf der interaktiven Sitzung?Wenn ich so etwas verwende wie script Ich bekomme zu viel Standardgeräusch.Ich muss nicht wirklich alle Objekte einlegen – wenn es jedoch eine Lösung gäbe, die das erledigt, wäre das in Ordnung.Im Idealfall bliebe mir nur ein Skript übrig, das genauso ausgeführt würde wie das, das ich interaktiv erstellt habe, und ich könnte einfach die Teile löschen, die ich nicht brauchte.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
  • neu interagieren – sehr beeindruckend, ich möchte mehr über Visualisierung lernen und es scheint, als würde es dort glänzen.Eine Art GTK/Gnome-Desktop-App, die Diagramme inline rendert.Stellen Sie sich eine Hybrid-Shell + Grafikrechner + Mini-Eclipse vor.Quellenverteilung hier: http://www.reinteract.org/trac/wiki/GettingIt .Gut auf Ubuntu aufgebaut, lässt sich auch in Gnome-Desktop-, Windows- und Mac-Installationsprogramme integrieren.
  • bpython - Extrem cool, viele nette Funktionen, automatische Vervollständigung (!), Zurückspulen, Speichern in einer Datei mit einem Tastendruck, Einrückung, gut gemacht.Python-Quellverteilung, einige Abhängigkeiten von SourceForge übernommen.

Ich bin davon überzeugt, dass diese Texte wirklich den Bedarf zwischen Dolmetscher und Redakteur decken.

War es hilfreich?

Lösung

IPython ist äußerst nützlich, wenn Sie interaktive Sitzungen gerne verwenden. Zum Beispiel für Ihren Anwendungsfall gibt es den %save Magie Befehl , die Sie gerade Eingang %save my_useful_session 10-20 23 Eingang 10 bis 20 Zeilen und 23 zu speichern, um zu my_useful_session.py (dabei zu helfen, jede Linie durch seine Nummer als Präfix).

Darüber hinaus ist die Dokumentation heißt es:

  

Diese Funktion verwendet die gleiche Syntax wie % Geschichte für Eingangsbereiche, speichert dann die Linien an den Dateinamen Sie angeben.

Auf diese Weise kann beispielsweise ältere Sitzungen zu verweisen, wie

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

Lesen Sie die Videos auf der Präsentationsseite einen schnellen Überblick über die Funktionen erhalten.

Andere Tipps

http://www.andrewhjon.es/save-interactive-python- Session-Geschichte

import readline
readline.write_history_file('/home/ahj/history')

Es gibt eine Weise 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 dann die Umgebungsvariable PYTHONSTARTUP in Ihrem Shell (beispielsweise in ~/.bashrc):

export PYTHONSTARTUP=$HOME/.pystartup

Sie können auch diese hinzufügen die automatische Vervollständigung erhalten kostenlos:

readline.parse_and_bind('tab: complete')

Bitte beachten Sie, dass dies nur auf * nix-Systemen funktioniert. Wie Readline- ist in Unix-Plattform zur Verfügung.

Wenn Sie mit IPython Sie auf eine Datei, die alle Ihre vorherigen Befehle mit Hilfe der magischen Funktion speichern können % Geschichte mit der -f Parameter, pe:

%history -f /tmp/history.py

Nach der Installation von IPython , und der Eröffnung einer IPython Sitzung, indem Sie den Befehl:

ipython

von der Kommandozeile, führen Sie einfach die ‚magische‘ IPython folgenden Befehl automatisch Ihre gesamte IPython Sitzung anmelden:

%logstart

Dies wird eine eindeutig benannte Py-Datei erstellen und speichern Sie Ihre Sitzung für eine spätere Verwendung als interaktive IPython Sitzung oder für die Verwendung im Skript (en) Ihrer Wahl.

Auch reinteract gibt Ihnen einen Notebook -artige Schnittstelle zu einer Python-Sitzung.

Neben IPython ein ähnliches Dienstprogramm bpython a „den Code speichern haben, Sie haben zu einem eingegebenen Datei“-Funktion

Ich hatte zu kämpfen, eine Antwort zu finden, ich ipython Umgebung sehr neu war.

Dies funktioniert

Wenn Ihre ipython Sitzung wie folgt 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 speichern von 1 bis 135 dann auf der gleichen ipython Sitzung Verwendung dieser Befehl

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

Dies Sie alle Python-Anweisungen in test.py Datei im aktuellen Verzeichnis speichern wird (in dem Sie die ipython initiiert).

Es gibt% Geschichte Magie für das Drucken und Speichern der Eingabeverlauf (und optional die Ausgabe).

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

>>> %hist -f my_history.py

Geschichte IPython speichert sowohl die Befehle, die Sie eingeben, und die Ergebnisse es produziert. Sie können ganz einfach mit den Auf- und Abwärtspfeiltasten durch vorherige Befehle gehen, oder Zugriff auf Ihre Geschichte in anspruchsvoller Weise.

Sie können die Geschichte% Magie-Funktion verwenden, um über Eingangs- und Ausgangs zu untersuchen. Eingang Geschichte aus früheren Sitzungen wird in einer Datenbank gespeichert, und IPython kann so konfiguriert werden Ausgabehistorie zu speichern.

Mehrere andere magische Funktionen können Sie Ihre Eingabe Geschichte, einschließlich% bearbeiten% erneut ausgeführt,% Rückruf% Makro% sparen und% Pastebin verwenden. Sie können ein Standardformat Linien beziehen verwenden:

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

Das wird die Linie 3 und die Zeilen 18 bis 20 aus der aktuellen Sitzung und Linien 1-5 aus der vorherige Sitzung.

Siehe% Geschichte? für das Docstring und weitere Beispiele.

Auch sollten Sie die Fähigkeiten von % store Magie erkunden für leichte Persistenz von Variablen in IPython.

  

Speichert Variablen, Aliase und Makros in IPython der 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, specifyc.StoreMagic.autorestore = True in ipython_config.py Autorestore.

Ein weiterer setzen in der Schüssel darauf hindeutet: Spyder

Es hat Geschichte log und Variable Explorer . Wenn Sie mit Matlab gearbeitet haben, dann werden Sie die Ähnlichkeiten sehen.

Was Linux betrifft, kann man es verwenden script Befehl zum Aufzeichnen der gesamten Sitzung.Es ist Teil von util-linux Paket sollte also auf den meisten Linux-Systemen vorhanden sein.Sie können einen Alias ​​oder eine Funktion erstellen, die aufgerufen wird script -c python und das wird in einem gespeichert 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 hierbei ist, dass die script zeichnet alles auf, sogar Zeilenvorschübe, wann immer Sie die Rücktaste usw. drücken.Vielleicht möchten Sie es also verwenden col um die Ausgabe zu bereinigen (siehe Dieser Beitrag auf Unix&Linux Stackexchange) .

gibt es eine weitere Option --- pyslice. in den "wxpython 2.8 docs Demos und Tool", gibt es ein Open-Source-Programm mit dem Namen "pyslices".

Sie können es wie ein Editor verwenden, und es unterstützt auch wie eine Konsole ---- jede Zeile wie eine interaktive Interpreter mit sofortigem Echo ausgeführt wird.

natürlich alle Blöcke von Codes und die Ergebnisse eines jeden Blocks wird in eine TXT-Datei automatisch aufgezeichnet werden.

werden die Ergebnisse direkt hinter dem entsprechenden Block von Code protokolliert. sehr bequem.

die Übersicht über pyslices

Der %history Befehl ist genial, aber leider wird es nicht lassen Sie die Dinge speichern, die% waren Paste in die sesh ‚d. Zu tun, dass ich glaube, Sie haben %logstart am Anfang zu tun (obwohl ich nicht bestätigt haben, das funktioniert).

Ich mag es tun

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

, die die Ausgabe, Zeilennummern speichern, und '>>>' vor jedem Eingang (o, n und p-Optionen). Lesen Sie die Dokumentation für% Geschichte hier .

Einige Kommentare wurden zu fragen, wie auf einmal alle der IPython Eingaben zu speichern. Für% sparen Magie in IPython, können Sie alle Befehle programmatisch speichern, wie unten dargestellt, die prompte Meldung zu vermeiden und auch Zahlen unter Angabe der Eingabe zu vermeiden.     GEGENWÄRTIGE_ZEILE = Len (In) -1     % Sparen -f my_session 1- $ GEGENWÄRTIGE_ZEILE

Die -f Option zum Erzwingen Dateiaustausch und die len(IN)-1 zeigt verwendet, um die aktuelle Eingabeaufforderung in IPython, so dass Sie die gesamte Sitzung programmatisch speichern.

Für die Verwendung spacemacs und ipython, die mit python-layer kommt, Magie sparen schafft eine Menge unerwünschter Ausgabe, wegen des ständigen Auto-Vervollständigung Befehls im Hintergrund arbeiten, wie:

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, nur den ipython Puffer speichern, wie Sie normalerweise andere sparen: spc f s

Ich möchte einen anderen Weg vorschlagen Python-Sitzung über tmux auf Linux zu halten. Sie laufen tmux, um sich selbst zu der Sitzung legen Sie geöffnet (wenn nicht, nachdem es direkt öffnen beigefügt). ausführen Python und tun, was Sie es tun. dann von Sitzung lösen. von einer tmux Sitzung Abnehmen nicht schließt die Sitzung. die Sitzung bleibt offen.

Vor dieser Methode: Sie können von jedem anderen Gerät dieser Sitzung anhängen (in Fall können Sie Ihren PC ssh)

Nachteile dieser Methode: diese Methode verzichtet nicht die von der geöffneten Python-Sitzung verwendeten Ressourcen, bis Sie tatsächlich die Python-Interpreter existieren.

Zur Eingabe und Ausgabe auf Xubuntu speichern :

  1. In XWindows laufen ipython vom Xfce Terminal app
  2. Klicken Sie Terminal in der oberen Menüleiste und suchen Sie nach save contents in der Dropdown-Liste

Das finde ich speichert die Eingabe und Ausgabe, den ganzen Weg zurück, wenn ich das Terminal geöffnet. Dies ist nicht IPython spezifisch und würde mit SSH-Sitzungen oder anderen Aufgaben aus den Terminal-Fenstern laufen arbeiten.

Wenn Sie bpython , alle Ihre Befehlsverlauf ist standardmäßig gespeichert ~/.pythonhist.

Um die Befehle für später speichern reusage Sie sie in eine Python-Skript-Datei kopieren:

$ cp ~/.pythonhist mycommands.py

bearbeiten Sie dann die Datei, um sie zu säubern und zu setzen unter Python-Pfad (global oder virtuelle Umgebung Website-Pakete, aktuelles Verzeichnis, in * .pth, oder auf anderer Weise zu erwähnen).

Um die Befehle in der Shell enthält, nur um sie aus der gespeicherten Datei importieren:

>>> from mycommands import *
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top