Interaktive Shell speichern und laden

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Angeregt von einem Beitrag auf Reddit hab ich mal pshell.py zusammengebastelt. Das ist ein kleines Modul mit dem man sich seine Python Session speicher kann (und später wieder laden). Leider geht das momentan noch nicht mit ipython, da müsste man noch sehen wie man an den ipython Namespace kommt.

Per default speichert sich die Session in /tmp/console.sess, wenn man was anderes will einfach an load/dump übergeben. Nach der Installation kann man das in etwa so verwenden:

Code: Alles auswählen

mitsuhiko@nausicaa:~/Development/sandbox$ python
Python 2.5.1 (r251:54863, Sep 27 2007, 07:23:02) 
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pshell
>>> from werkzeug import url_decode
>>> x = url_decode("foo=bar&foo=baz")
>>> x["blah"] = "something else"
>>> def adder(x):
...  return lambda y: x + y
... 
>>> add_two = adder(2)
>>> pshell.dump()
>>> 
Und natürlich wieder laden:

Code: Alles auswählen

mitsuhiko@nausicaa:~/Development/sandbox$ python
Python 2.5.1 (r251:54863, Sep 27 2007, 07:23:02) 
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pshell
>>> pshell.load()
>>> x
MultiDict([('blah', 'something else'), ('foo', u'bar')])
>>> add_two(23)
25
>>> dir()
['__builtins__', '__doc__', '__name__', 'add_two', 'adder', 'pshell', 'url_decode', 'x']
Geht natürlich nur, wenn man die Objekte auch pickeln kann.
TUFKAB – the user formerly known as blackbird
BlackJack

In IPython gibt's doch die ``%store``-Funktion. Man muss zwar explizit sagen welche Objekte man gerne persistent hätte, aber da ich oft eine Shell mehrere Tage benutze, fliegt da in der Regel auch eine Menge an Daten herum, die ich gar nicht persistent haben möchte. :-)
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

BlackJack hat geschrieben:In IPython gibt's doch die ``%store``-Funktion. Man muss zwar explizit sagen welche Objekte man gerne persistent hätte, aber da ich oft eine Shell mehrere Tage benutze, fliegt da in der Regel auch eine Menge an Daten herum, die ich gar nicht persistent haben möchte. :-)
Jo. Aber IPython kann keine selbst definierten Funktionen picklen :)
TUFKAB – the user formerly known as blackbird
lunar

Naja, für mich war das irgendwie noch nie ein Problem... Funktionen, die so komplex waren, dass sich das "aufheben" lohnen würde, packe ich eh in ein eigenes Modul ;)

Ansonsten verrät dir IPython auch selbst, wie man an den Namensraum rankommt. Ein "who??" zeigt dir, wie diese Magic-Funktion implementiert ist, und führt dich zu ``def magic_who_ls(self, parameter_s='')`` (bei mir in ``/usr/lib/python2.5/site-packages/IPython/Magic.py``). Dort wird der IPython-Namensraum angesprochen.

Und wenn du zu faul bist, die Sourcen zu lesen, dann gibt es auch noch die Doku ;) Damit solltest du wohl alles an der Hand haben, um %store neu zu implementieren (der Maintainer von IPython freut sich bestimmt auch ;) ).
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Dieses AppEngine-Beispiel funktioniert übrigens sehr ähnlich...

Stefan
Antworten