Interaktive Shell speichern und laden

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

Interaktive Shell speichern und laden

Beitragvon mitsuhiko » Dienstag 20. Mai 2008, 00:14

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

Beitragvon BlackJack » Dienstag 20. Mai 2008, 08:43

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. :-)
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Dienstag 20. Mai 2008, 09:20

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

Beitragvon lunar » Dienstag 20. Mai 2008, 10:14

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

Beitragvon sma » Sonntag 25. Mai 2008, 08:55

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

Stefan

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder