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?
当前回答
你可以用内置函数打开:我用它在我的所有 我需要存储一些历史的程序(包括计算器等) 例如:
#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!
我要感谢所有喜欢我评论的人!感谢您的阅读!
其他回答
如果使用bpython,所有的命令历史都会默认保存到~/.pythonhist。
要保存命令以供以后重用,您可以将它们复制到python脚本文件中:
$ cp ~/.pythonhist mycommands.py
然后编辑该文件以清理它并将其放在Python路径下(全局或虚拟环境的site-packages,当前目录,在*.pth中提到,或其他方式)。
要将命令包含到你的shell中,只需从保存的文件中导入它们:
>>> from mycommands import *
一些评论询问如何一次保存所有的IPython输入。对于IPython中的%save魔术,您可以以编程方式保存所有命令,如下所示,以避免提示消息,也避免指定输入数字。 currentLine = len(In)-1 %save -f my_session 1-$currentLine
f选项用于强制替换文件,len(IN)-1显示IPython中的当前输入提示符,允许您以编程方式保存整个会话。
就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的文章)。
我想建议另一种在linux上通过tmux维护python会话的方法。运行tmux,将自己附加到所打开的会话(如果直接打开后没有附加)。执行python并在它上做任何事情。然后从会话中分离。从tmux会话分离并不会关闭会话。会议仍然开放。
这种方法的优点: 您可以从任何其他设备连接到此会话(如果您可以SSH您的pc)
这种方法的缺点: 在python解释器真正存在之前,此方法不会放弃被打开的python会话所使用的资源。
%history命令非常棒,但不幸的是,它不能让您将%paste 'd保存到sesh中。要做到这一点,我认为你必须在开头执行%logstart(尽管我还没有确认这是有效的)。
我喜欢做的是
%history -o -n -p -f filename.txt
它将在每个输入(o, n和p选项)之前保存输出,行号和'>>>'。请在这里查看文档中的%history。
推荐文章
- 如何在Python中进行热编码?
- 如何嵌入HTML到IPython输出?
- 在Python生成器上使用“send”函数的目的是什么?
- 是否可以将已编译的.pyc文件反编译为.py文件?
- Django模型表单对象的自动创建日期
- 在Python中包装长行
- 如何计算两个时间串之间的时间间隔
- 我如何才能找到一个Python函数的参数的数量?
- 您可以使用生成器函数来做什么?
- 将Python诗歌与Docker集成
- 提取和保存视频帧
- 使用请求包时出现SSL InsecurePlatform错误
- 如何检索Pandas数据帧中的列数?
- except:和except的区别:
- 错误:“字典更新序列元素#0的长度为1;2是必需的”