Найти - Пользователи
Полная версия: Как отследить появление файла в заданном каталоге?
Начало » Python для новичков » Как отследить появление файла в заданном каталоге?
1
alex_pro
Подскажите новичку.

Как можно отследить появление файла (имя неизвестно) в заданном пустом каталоге (под windows)?
Понимаю, что самое простое решение - сделать цикл и в нем следить за списком файлов.
Не очень красиво и неэффективно.

Хотелось, чтобы при появлении нового файла запускался заданный процесс
с параметром (имя этого файла).
Реально ли?
Если да, то бросьте пример или хотя бы ключевые слова :)

Заранее благодарен.

Lexander
Из закладок:
http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html
sanodin

Следит за файлами в папке Temp

# -*- coding: cp1251 -*-
import os, win32file, win32con
def _print(argStr):
print unicode(argStr, 'cp1251')

ACTIONS = {
1 : unicode("Создан", 'cp1251'),
2 : unicode("Удалён", 'cp1251'),
3 : unicode("Изменён", 'cp1251'),
4 : unicode("Переименован во что-то", 'cp1251'),
5 : unicode("Переименован из чего-то", 'cp1251')
}
FILE_LIST_DIRECTORY = 0x0001

path_to_watch = "C:\Documents and Settings\san\Local Settings\Temp\\"
hDir = win32file.CreateFile( # открываем каталог
path_to_watch,
FILE_LIST_DIRECTORY, # тип доступа
win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_FLAG_BACKUP_SEMANTICS,
None
)
while 1:
results = win32file.ReadDirectoryChangesW ( # считываем изменения
hDir,
1024, # размер буфера для возврата результата
True, # рекурсивно с подкаталогами
win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
win32con.FILE_NOTIFY_CHANGE_SIZE |
win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
)
for action, file in results:
full_filename = os.path.join (path_to_watch, file)
print full_filename, ACTIONS.get (action, "Unknown")

Поиск и запуск файла
import os


for d, dirs, files in os.walk("D:/"):
for f in files:

if f == "mail.py":
print f,"Найдено в", d
os.chdir(d)#указание директории
os.startfile(f)#запуск файла
alex_pro
Спасибо, коллеги! Все работает.
odnochlen
1 : unicode("Создан", 'cp1251'),
А может проще u“Создан”? Тем более, поменяешь кодировку файла - все упадет.

path_to_watch = "C:\Documents and Settings\san\Local Settings\Temp\\"
Тут сырая строка не помешала бы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB