Код, который вы предоставили, собирается получить список путей, соответствующих данному глобу, а затем сразу же выполнить итерацию по этому списку и выдать исключение, если какой-либо из них исчезнет во время итерации.
Это исключение будет выдается только в том случае, если файл удален между расширением glob
и проверкой существования пути .
Скажите, если я ошибаюсь, но я думаю, чтовы пытаетесь сделать, это получить список файлов, которые существуют в начале программы, а затем вызвать исключение, когда любой из них исчезнет.Что вы можете сделать следующим образом:
import time
# Get the list at program start.
original_list = glob.glob("/Users/kjoyner/src/*")
while True:
time.sleep(1) # Do work here.
new_list = glob.glob("/Users/kjoyner/src/*")
for file in original_list:
if file not in new_list:
raise Exception("Missing file: {0}".format(file))
Когда я удаляю файл в этом каталоге в другом окне, я вижу:
Exception: Missing file: /Users/kjoyner/src/sacrificial
Обратите внимание, что если кто-то добавляет файл после запуска программы, а затем удаляет его, тогда этот код не поймает это, потому что файл не будет в original_list
.Если вы хотите поймать это, вам нужно использовать наборы вместо списков и обновить original_list
(который вы бы хотели переименовать) в каждом цикле, чтобы объединить original_list
и new_list
.
Обратите внимание, что это не рекурсивно.Если кто-то удалит подкаталог каталога, в котором вы находитесь, исключение не будет сгенерировано, так как оно не было в original_list
.