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?


当前回答

保存XUbuntu的输入输出:

在XWindows中,从Xfce终端应用程序运行iPython 单击顶部菜单栏中的“终端”,在下拉菜单中查找保存内容

我发现这节省了输入和输出,一直追溯到我打开终端的时候。这不是特定于ipython的,它与ssh会话或从终端窗口运行的其他任务一起工作。

其他回答

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

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

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

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

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

%history -f /tmp/history.py

有一种方法可以做到。将文件存储在~/.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

然后在shell中设置环境变量PYTHONSTARTUP(例如在~/.bashrc中):

export PYTHONSTARTUP=$HOME/.pystartup

你也可以添加这个来获得免费的自动补全:

readline.parse_and_bind('tab: complete')

请注意,这只适用于*nix系统。因为readline只在Unix平台上可用。

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

ipython

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

%logstart

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

我不得不努力寻找答案,我对iPython环境非常陌生。

这是可行的

如果你的iPython会话是这样的

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})

你想保存从1到135的行,然后在同一个ipython会话上使用这个命令

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

这将把你所有的python语句保存在当前目录下的test.py文件中(你启动ipython的地方)。