如果os.walk扫描的文件在执行期间发生了变化,会发生什么?

时间:2017-10-26 18:44:08

标签: python file-io filesystems

.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找到吗?

1 个答案:

答案 0 :(得分:1)

这不是关于os.walk的,而是操作系统的功能 在linux上打开一个目录(有一个系统调用),数据不会在你手下改变

所以如果在你的循环中你打开一个文件并花10分钟来处理它并且其中一个未处理的文件被删除,walk仍然会给你这个名字以及在opendir之后创建的任何文件都不会被列出

如果在文件丢失之前丢失文件,您将需要例外来处理案件