Python Glossary English

Python 3.3+Linux · macOSosфункция

os.fwalk

os — обход дерева

Как os.walk, но дополнительно выдаёт дескриптор каталога (безопаснее к гонкам). Доступно на Unix.

Синтаксис

os.fwalk(...)

Выдаёт дескриптор каталога, и операции относительно него (stat(name, dir_fd=fd)) защищают от подмены каталога символической ссылкой посреди обхода. Дескриптор действителен только до следующего шага — чтобы сохранить его, сделайте os.dup. В отличие от других функций, по умолчанию не следует по ссылкам (follow_symlinks=False).

Примеры

import os
walker = os.fwalk('/etc')  # генератор держим в переменной: пока он жив, жив и дескриптор каталога
step = next(walker)
print(len(step))  # → 4 — (dirpath, dirnames, filenames, dirfd); у os.walk элементов 3
print(step[0])  # → ? только Unix: /etc — обход начинается с корня дерева
print(os.stat(step[2][0], dir_fd=step[3]).st_size)  # → ? только Unix: размер первого файла в /etc, полученный через дескриптор каталога, а не по пути — ради этого fwalk и берут
print(list(os.fwalk('/нет-такого')))  # → FileNotFoundError — в отличие от os.walk, который на несуществующем каталоге молча даёт []

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности