Python 如何读取或复制文件而不干扰其他进程的写入?

Python 如何读取或复制文件而不干扰其他进程的写入?,python,powershell,file,batch-file,file-io,Python,Powershell,File,Batch File,File Io,我需要创建一个文件的修改副本,该文件由不在我控制下的程序定期更新。我可以通过定时循环来完成,因此不需要监听文件更改 我担心同时从不同进程写入和读取文件之间可能存在冲突我肯定需要避免写入进程崩溃。在读卡器进程中,如果出现问题,我可以重试。我不知道编写器是如何打开文件的,但它似乎可以为每个新数据段打开和关闭文件 在这种情况下,我需要考虑什么?我应该让操作系统在开始操作之前先复制文件吗?该解决方案应在Windows中工作。我还没有决定是用Python编写(我比较熟悉),还是用bat或PowerShel

我需要创建一个文件的修改副本,该文件由不在我控制下的程序定期更新。我可以通过定时循环来完成,因此不需要监听文件更改

我担心同时从不同进程写入和读取文件之间可能存在冲突我肯定需要避免写入进程崩溃。在读卡器进程中,如果出现问题,我可以重试。我不知道编写器是如何打开文件的,但它似乎可以为每个新数据段打开和关闭文件

在这种情况下,我需要考虑什么?我应该让操作系统在开始操作之前先复制文件吗?该解决方案应在Windows中工作。我还没有决定是用Python编写(我比较熟悉),还是用bat或PowerShell脚本编写(客户端不需要安装任何东西)


我刚刚在Linux上用Python做了一个小实验,其中一个进程

f = open("data.txt", "w")
f.write("1\n")
input("press enter to continue")
f.write("2\n")
f.close()
另一个在做什么

f = open("data.txt", "r")
print(f.readline())
input("press")
print(f.readline())
f.close()

当读者处于写作的中间时,读者总是看到文件的原始版本,读者似乎从不打扰作者。它是Linux的东西吗?当文件包含大量数据时会有所不同吗?

类似的批处理示例,请参阅@DBenhamIn short的答案,如果使用文件锁,这将向任何其他打开过程表明文件正在使用。打开过程可以检查锁,如果锁到位,它将等待/延迟,直到可用或过期。这可能不是你想要的,但这是避免冲突的一种方式。这显然是针对写入模式的东西,因为读取模式可以在当前打开进行写入的文件上完成(尽管可能会看到过时的数据)@GerhardBarnard,我忘了说编写器似乎在每次写入/追加后都会关闭该文件。打开文件时,编写器会告诉您是否可以写入。因此,如果它允许你那么它是说它可以处理它。看,这个文件有多大?writer应用程序如何创建/写入文件?您可以处理部分更新的文件副本,还是会导致问题?如果您干扰了writer应用程序的写入/更新文件-崩溃、文件损坏、出错,writer应用程序会怎么做?这些都是解决问题的重要考虑因素。例如,如果文件很小且不经常更新,您可以制作一个副本,将其与原始文件进行比较,如果它们相同,则使用您的副本,而不用担心原始文件是否更新。类似的批处理示例,请参见@DBenhamIn short的答案,如果使用文件锁,这将向任何其他打开进程指示该文件正在使用。打开过程可以检查锁,如果锁到位,它将等待/延迟,直到可用或过期。这可能不是你想要的,但这是避免冲突的一种方式。这显然是针对写入模式的东西,因为读取模式可以在当前打开进行写入的文件上完成(尽管可能会看到过时的数据)@GerhardBarnard,我忘了说编写器似乎在每次写入/追加后都会关闭该文件。打开文件时,编写器会告诉您是否可以写入。因此,如果它允许你那么它是说它可以处理它。看,这个文件有多大?writer应用程序如何创建/写入文件?您可以处理部分更新的文件副本,还是会导致问题?如果您干扰了writer应用程序的写入/更新文件-崩溃、文件损坏、出错,writer应用程序会怎么做?这些都是解决问题的重要考虑因素。例如,如果文件很小且不经常更新,您可以制作一个副本,将其与原始文件进行比较,如果它们相同,则使用您的副本,而不用担心原始文件是否更新。