2017-09-14 59 views
0

我想用一个文件(csv,json,txt,还没有决定格式),我可以放下几行数据。python脚本将在cron上运行每隔5分钟检查文件是否有新内容,如果有,处理它并删除每一行,因为它处理。编辑文件正在处理的Python脚本

我试图阻止,我打开文件的情况下,做一些修改,并将其保存在过程走过来抓住数据并清空该文件,但我保存写回。

我以为唯一的方法是让它处理一个文件夹,只查找新的文件,所有的改变都会被放到一个新的文件中。所以不会有这种情况发生的风险。

有没有更好的方法,或者这是最好的方法?

+1

不知道这是你可能会寻找:https://stackoverflow.com/questions/30407352/how-to-prevent-a-race-condition-when-multiple-processes-attempt-to-write-to-和 – RetardedJoker

+0

我第二个以上的建议。文件系统级锁已经足够用于这个目的。你也可以尝试运行python脚本作为守护进程处理inotify事件,如果你的文件系统支持的话。请参阅[本文中的inotify和跨平台解决方案的建议](https://stackoverflow.com/q/12582720/1328439) –

回答

0

您可以使用下面的步骤:如果该文件是由其他进程打开

它运行在cron
  1. Python脚本将检查。在Linux中,可以使用lsof完成。
  2. 如果文件是打开的,当cron运行时,它不会处理文件数据。
  3. 如果该文件被其他脚本使用,则可以为将向文件添加数据的脚本添加相同的逻辑。
1

检查this answer to see if the file is already open,如果是,就等着5分多钟,直到,或者内部睡觉,并尝试每10秒一次,直到它的工作原理,但最长不得超过4分钟,例如:

for i in range(attempts): 
    if not fileInUse(): 
     processFile() 
    else: 
     time.sleep(10)