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?


当前回答

如果您喜欢使用交互式会话,IPython是非常有用的。例如,在您的用例中,有一个%save magic命令,您只需输入%save my_useful_session 10-20 23,将第10行到第20行和第23行保存到my_useful_session.py(为了帮助实现这一点,每一行都有它的数字前缀)。

此外,文件指出:

此函数对输入范围使用与%history相同的语法,然后将行保存到指定的文件名。

例如,这允许引用旧的会话,例如

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

查看演示页面上的视频以快速了解功能。

其他回答

如果您喜欢使用交互式会话,IPython是非常有用的。例如,在您的用例中,有一个%save magic命令,您只需输入%save my_useful_session 10-20 23,将第10行到第20行和第23行保存到my_useful_session.py(为了帮助实现这一点,每一行都有它的数字前缀)。

此外,文件指出:

此函数对输入范围使用与%history相同的语法,然后将行保存到指定的文件名。

例如,这允许引用旧的会话,例如

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

查看演示页面上的视频以快速了解功能。

如果你正在使用IPython,你可以使用神奇的%history函数和-f参数p.e将你之前的所有命令保存到一个文件中:

%history -f /tmp/history.py

就Linux而言,人们可以使用脚本命令来记录整个会话。它是util-linux包的一部分,所以应该在大多数Linux系统上。你可以创建一个别名或函数,调用script -c python,并保存到typescript文件中。例如,这里有一个这样的文件的再版。

$ 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

这里的一个小缺点是,脚本会记录所有内容,甚至换行,无论何时点击退格等等。所以你可能想使用col来清理输出(参见这篇关于Unix&Linux Stackexchange的文章)。

还有另一种选择——耻骨瓣切除术。 在“wxpython 2.8文档演示和工具”中,有一个名为“pyslices”的开源程序。

你可以像编辑器一样使用它,它也支持像控制台一样使用----,像交互式解释器一样执行每一行,具有即时回显。

当然,所有的代码块和每个块的结果都会自动记录到一个TXT文件中。

结果被记录在相应代码块的后面。非常方便。

在安装Ipython并打开Ipython会话后,执行以下命令:

ipython

在你的命令行中,只需运行下面的Ipython 'magic'命令来自动记录你的整个Ipython会话:

%logstart

这将创建一个唯一命名的.py文件,并存储您的会话,以供以后作为交互式Ipython会话使用或在您选择的脚本中使用。