Форум сайта python.su
0
Подскажите новичку.
Как можно отследить появление файла (имя неизвестно) в заданном пустом каталоге (под windows)?
Понимаю, что самое простое решение - сделать цикл и в нем следить за списком файлов.
Не очень красиво и неэффективно.
Хотелось, чтобы при появлении нового файла запускался заданный процесс
с параметром (имя этого файла).
Реально ли?
Если да, то бросьте пример или хотя бы ключевые слова :)
Заранее благодарен.
Офлайн
33
Офлайн
31
Следит за файлами в папке 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)#запуск файла
Отредактировано sanodin (Июль 5, 2012 06:43:27)
Офлайн
0
Спасибо, коллеги! Все работает.
Офлайн
14
1 : unicode("Создан", 'cp1251'),
path_to_watch = "C:\Documents and Settings\san\Local Settings\Temp\\"
Отредактировано odnochlen (Июль 5, 2012 01:19:35)
Офлайн