emi*_*ish 6 python unix file-io updates background-process
我想找出一种方法来警告python脚本文件已完成复制.这是场景:
to_print脚本通过不断轮询来监视文件夹os.listdir().
每次os.listdir()返回一个文件列表,其中存在以前从未见过的文件时,该脚本会对该文件执行一些操作,包括打开它并操纵其内容.
当文件较小时,这很好,并且将文件从其原始源复制到正在观看的目录所花费的时间少于下次轮询之前的剩余时间os.listdir().但是,如果轮询并找到文件,但它仍处于被复制的过程中,则当脚本尝试对其执行操作时,文件内容将损坏.
相反,我希望能够(使用os.stat或以其他方式)知道当前正在复制文件,并等待它完成,直到我采取行动,如果是这样.
我目前的想法是os.stat()每次找到一个新文件时使用,然后等到下次轮询并比较自上次轮询以来修改/创建的时间,如果它们保持不变则该文件是"稳定的",否则继续投票直到它.我不确定这会工作,因为我不太熟悉Linux/Unix如何更新这些值.
由于可以在轮询间隔内复制文件,因此只需在检查新文件之前处理上次轮询找到的新文件即可。换句话说,而不是这个:
while True:
newfiles = check_for_new_files()
process(newfiles)
time.sleep(pollinterval)
Run Code Online (Sandbox Code Playgroud)
做这个:
newfiles = []
while True:
process(newfiles)
newfiles = check_for_new_files()
time.sleep(pollinterval)
Run Code Online (Sandbox Code Playgroud)
或者只是将等待放在循环中间(实际上效果相同):
while True:
newfiles = check_for_new_files()
time.sleep(pollinterval)
process(newfiles)
Run Code Online (Sandbox Code Playgroud)