需要一种方法来确定文件是否已经写入完成

9
我所处的情况是这样的-有一个正在写入文件的进程,有时文件相当大,比如400-500MB。我需要知道它何时完成写入。我该如何确定呢?如果我在目录中查看,我会看到它在那里,但它可能还没有完成写入。此外,这需要在远程进行-也就是说,在同一内部局域网上,但不在同一台计算机上运行,并且通常想要知道文件写入何时完成的进程正在Linux盒子上运行,而将文件本身和正在写入文件的进程放在Windows盒子上。Samba不是选项。xmlrpc通信到该Windows盒子上的服务以及使用snmp来检查是否可行都是选项。
理想情况下:
- 可以在Linux或Windows上工作-这意味着解决方案与操作系统无关。 - 适用于任何类型的文件。
足够好:
- 仅在Windows上工作,但可以通过某些库或其他可以使用Python访问的方式完成。 - 仅适用于PDF文件。
目前最好的想法是定期从Windows盒子上的某个进程打开相关文件,并检查最后几个字节,检查PDF结束标记并考虑eol差异,因为文件可能已在Linux或Windows上创建。

1
可能会发现这个链接有帮助:https://dev59.com/ukbRa4cB1Zd3GeqP2rHa将(1)与xmlrpc结合起来,你可能就可以做成了。 - gilesc
谢谢gilsec,这确实提供了很好的思路。 - Khorkrak
2个回答

8

可能有很多方法可以采取。我会尝试用写入访问权限打开文件。如果成功了,那么就没有其他人在写这个文件。

如果您在不同机器之间没有直接访问文件,则可以围绕此概念构建一个 Web 服务。


是的,我们一直在考虑这样做,或者尝试移动/重命名文件,以查看是否成功,一旦我们看到它存在于目录中。至于竞态条件,我在这里没有看到任何问题,因为我们只会在看到文件后尝试它(意味着写入过程已经打开它进行写入,并可能已经关闭它)。 - Khorkrak

1

最终我解决了我们的情况。事实证明,写出文件的进程已经独占地打开了它们,所以我们所要做的就是尝试以读取方式打开它们——当被拒绝时,它们正在使用。


这些答案描述了如何在Python中实现所述的独占性:https://dev59.com/tXVC5IYBdhLWcg3wykQt#195021 https://dev59.com/gWkw5IYBdhLWcg3waZ74#9907774 - EliadL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接