【发布时间】:2015-08-20 17:22:48
【问题描述】:
我有一个长时间运行的 python 进程,它定期使用
转储泡菜 while True:
do_something()
pickle.dump(var, open('file','wb'))
我删除了“文件”,假设它无论如何都会被重写,但文件永远消失了。我认为每次调用 open() 时 python 都会创建一个新的文件处理程序。有没有办法恢复这个文件?该进程仍在运行,它仍会写入“文件”。
顺便说一句,这是一台 Ubuntu 机器
【问题讨论】:
-
您确定脚本没有挂在其他地方吗?您应该创建一个新文件是正确的。另外,这个脚本运行了多长时间,你是否发现了这个代码的异常?如果脚本已经运行了很长时间,您可能会遇到打开文件描述符的操作系统限制,因为您没有正确关闭它们。
-
我同意上面的评论,在几个层次上,脚本可以挂在其他地方。脚本是否附加到文件中,我认为这将是“w+”,而不仅仅是“w”。此外,您应该使用上下文管理器打开文件,在本例中为
with语句。 -
要检查文件的多个实例是否由于关闭不当而持有不必要的描述符,您可以使用“lsof | grep name_of_file”。
-
我有一个非常相似的设置,我在 Web 服务器上运行,到目前为止我从未遇到过“消失”文件的问题。我怀疑问题出在其他地方?也许有脚本挂在
do_something()并且从不执行dump调用? -
你确定文件夹里没有~filename吗?
标签: python file pickle recovery