I find myself frequently using Python's interpreter to work with databases, files, etc -- basically a lot of manual formatting of semi-structured data. I don't properly save and clean up the useful bits as often as I would like. Is there a way to save my input into the shell (db connections, variable assignments, little for loops and bits of logic) -- some history of the interactive session? If I use something like script
I get too much stdout noise. I don't really need to pickle all the objects -- though if there is a solution that does that, it would be OK. Ideally I would just be left with a script that ran as the one I created interactively, and I could just delete the bits I didn't need. Is there a package that does this, or a DIY approach?
UPDATE: I am really amazed at the quality and usefulness of these packages. For those with a similar itch:
- IPython -- should have been using this for ages, kind of what I had in mind
- reinteract -- very impressive, I want to learn more about visualization and this seems like it will shine there. Sort of a gtk/gnome desktop app that renders graphs inline. Imagine a hybrid shell + graphing calculator + mini eclipse. Source distribution here: http://www.reinteract.org/trac/wiki/GettingIt . Built fine on Ubuntu, integrates into gnome desktop, Windows and Mac installers too.
- bpython -- extremely cool, lots of nice features, autocomplete(!), rewind, one keystroke save to file, indentation, well done. Python source distribution, pulled a couple of dependencies from sourceforge.
I am converted, these really fill a need between interpreter and editor.
As far as Linux goes, one can use
script
command to record the whole session. It is part ofutil-linux
package so should be on most Linux systems . You can create and alias or function that will callscript -c python
and that will be saved to atypescript
file. For instance, here's a reprint of one such file.Small disadvantage here is that the
script
records everything , even line-feeds, whenever you hit backspaces , etc. So you may want to usecol
to clean up the output (see this post on Unix&Linux Stackexchange) .IPython is extremely useful if you like using interactive sessions. For example for your use-case there is the
%save
magic command, you just input%save my_useful_session 10-20 23
to save input lines 10 to 20 and 23 tomy_useful_session.py
(to help with this, every line is prefixed by its number).Furthermore, the documentation states:
This allows for example, to reference older sessions, such as
Look at the videos on the presentation page to get a quick overview of the features.
I had to struggle to find an answer, I was very new to iPython environment.
This will work
If your iPython session looks like this
You want to save lines from 1 till 135 then on the same ipython session use this command
This will save all your python statements in test.py file in your current directory ( where you initiated the ipython).
there is another option --- pyslice. in the "wxpython 2.8 docs demos and tools", there is a open source program named "pyslices".
you can use it like a editor, and it also support using like a console ---- executing each line like a interactive interpreter with immediate echo.
of course, all the blocks of codes and results of each block will be recorded into a txt file automatically.
the results are logged just behind the corresponding block of code. very convenient.
The
%history
command is awesome, but unfortunately it won't let you save things that were %paste 'd into the sesh. To do that I think you have to do%logstart
at the beginning (although I haven't confirmed this works).What I like to do is
%history -o -n -p -f filename.txt
which will save the output, line numbers, and '>>>' before each input (o, n, and p options). See the docs for %history here.