【发布时间】:2021-12-17 21:33:54
【问题描述】:
我偶然发现了一个不直观的问题:如果您递归地 glob(使用 pathlib)快速更改目录,在其中创建和删除其他目录,您有机会获得FileNotFoundException。如果找不到目录,那为什么要打扰我呢?为什么不跳过虚假目录并继续?以及如何以紧凑的方式解决这个问题?
这里是如何重现这个:
用这个 sh 命令启动一个终端
while true; do mkdir deleteme && rmdir deleteme; done
另一个使用这个 python 脚本:
from pathlib import Path
p = Path()
while True:
list(p.rglob('*'))
或者,作为oneliner:
while true; do mkdir 1 && rmdir 1; done & python3 -c "from pathlib import Path; from itertools import count; p = Path(); [list(p.rglob('*')) for i in count(start=1)]"; fg
【问题讨论】:
-
你试过
try: list(p.rglob('*')) except FileNotFoundException: continue -
这不是一个选项,我需要所有可以给我 rglob 的东西。如果它会被中断,我需要重新启动它。
-
因为听起来你需要 speec pathlib 并不是最快的。如果你不是一定要使用 rglob,看看这个github.com/juancarlospaco/thatlib#thatlib
-
也许这是 serverfault 或 unix 上的人们更熟悉的情况
标签: python python-3.x glob pathlib