.NET版本中有similar question,但我具体询问Python os.walk
函数。我正在使用最新的Python 3。
假设我有一个目录,其中有许多文件。我正在执行一个在每个文件上花费一段时间的操作,留下足够的时间让root
目录在另一个进程的中间循环中更改。这是一个例子,为了清楚起见:
for root, dirs, files in os.walk(rootDirectory):
for file in files:
doAReallyLongBlockingCall(file)
os.walk
会检测到这些变化吗?如果我添加文件,它们会被os.walk
找到吗?
答案 0 :(得分:1)
这不是关于os.walk的,而是操作系统的功能 在linux上打开一个目录(有一个系统调用),数据不会在你手下改变
所以如果在你的循环中你打开一个文件并花10分钟来处理它并且其中一个未处理的文件被删除,walk仍然会给你这个名字以及在opendir之后创建的任何文件都不会被列出
如果在文件丢失之前丢失文件,您将需要例外来处理案件