Использование модуля glob в цикле while для ожидания загрузки

Я хочу приостановить свой скрипт Python, ожидая загрузки файла. Я не хочу использовать явное ожидание. Я хочу, чтобы это работало быстро и не полагалось на явное ожидание. Я немного нуб, но вот что я пробовал.

file_check = glob.glob1('downloads', '*.pdf')
        while not os.path.isfile(str(file_check)):
            time.sleep(1)

Я использовал str(), потому что он жаловался на необходимость строки для пути. У меня такое чувство, что это не способ правильно сделать это. так как я должен динамически ждать загрузки файла?

PS Мой файл .pdf загружается в «/downloads», и мой pdf-файл динамически именуется перед загрузкой, поэтому мне нужен подстановочный знак globs.


person Gdfelt    schedule 04.12.2016    source источник


Ответы (1)


Когда вы делаете file_check = glob.glob1('downloads', '*.pdf'), результат glob.glob1(...) сохраняется в file_check только один раз, и все. В этом случае, если вы войдете внутрь цикла while, вы никогда не выйдете оттуда, потому что file_check не изменится (кроме случаев, когда есть потоки или подобные вещи, которые могут изменять свое значение извне).

glob.glob и glob.glob1 (это не даже public, как вы можете видеть в документах) возвращает список. Если папка «Загрузки» пуста, вы получите пустой список []. В Python списки имеют неявное логическое значение, поэтому если список пуст, в условном операторе он будет интерпретирован как False или «Истина», если он не пуст.

Переписывая свой код, результат будет примерно таким:

while not glob.glob1('downloads', '*.pdf'):
    time.sleep(1)
person GustavoIP    schedule 07.12.2016