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中,我首先使用

In [2]: %hist

查看我过去的代码。我选择我想要保存的块,然后使用%%文件魔法(%%writefile的缩写)将其粘贴到文件my_file.py中。

In [3]: %%file my_file.py
   ...: # paste code here 
   ...:  
   ...:  

最后按了两次回车键。

使用选项-a: %%file -a my_file.py追加文件。

如果需要,我可以在底层命令行中使用感叹号列出、编辑文件等

In [5]: !ls -l my_file.py
In [6]: !vi my_file.py

其他回答

我想建议另一种在linux上通过tmux维护python会话的方法。运行tmux,将自己附加到所打开的会话(如果直接打开后没有附加)。执行python并在它上做任何事情。然后从会话中分离。从tmux会话分离并不会关闭会话。会议仍然开放。

这种方法的优点: 您可以从任何其他设备连接到此会话(如果您可以SSH您的pc)

这种方法的缺点: 在python解释器真正存在之前,此方法不会放弃被打开的python会话所使用的资源。

除了IPython之外,类似的实用程序bpython还有一个“将您输入的代码保存到文件中”的特性

%history命令非常棒,但不幸的是,它不能让您将%paste 'd保存到sesh中。要做到这一点,我认为你必须在开头执行%logstart(尽管我还没有确认这是有效的)。

我喜欢做的是

%history -o -n -p -f filename.txt

它将在每个输入(o, n和p选项)之前保存输出,行号和'>>>'。请在这里查看文档中的%history。

你可以用内置函数打开:我用它在我的所有 我需要存储一些历史的程序(包括计算器等) 例如:

#gk-test.py or anything else would do
try: # use the try loop only if you haven't created the history file outside program
    username = open("history.txt").readline().strip("\n")
    user_age = open("history.txt").readlines()[1].strip("\n")
except FileNotFoundError:
    username = input("Enter Username: ")
    user_age = input("Enter User's Age: ")
    open("history.txt", "w").write(f"{username}\n{user_age}")
#Rest of the code is secret! try it your own!

我要感谢所有喜欢我评论的人!感谢您的阅读!

一些评论询问如何一次保存所有的IPython输入。对于IPython中的%save魔术,您可以以编程方式保存所有命令,如下所示,以避免提示消息,也避免指定输入数字。 currentLine = len(In)-1 %save -f my_session 1-$currentLine

f选项用于强制替换文件,len(IN)-1显示IPython中的当前输入提示符,允许您以编程方式保存整个会话。