Форум сайта python.su
0
Доброго времени суток.
Подскажите пожалуйста, как правильно реализовать выполнение скрипта если в директории появился определенный файл ?
т.е.
0. ждем когда файл появится.
1. появился файл 1.txt
2. выполнился скрипт который за собой этот файл удалил.
3. ждем когда файл появится снова.
Офлайн
52
А в чем проблема-то? В цикле проверяете наличие файла, при появлении выполняете скрипт и удаляете файл. Алгоритм у вас уже написан.
http://stackoverflow.com/questions/82831/how-do-i-check-if-a-file-exists-using-python
http://docs.python.org/library/time.html#time.sleep
http://docs.python.org/library/os.html#os.remove
Офлайн
0
fata1ex
А в чем проблема-то? В цикле проверяете наличие файла, при появлении выполняете скрипт и удаляете файл. Алгоритм у вас уже написан.
Офлайн
14
SenhionФлаг поставить. Или в яве интересная вещь есть interrupt(), будит из sleep(), может и на питон перенесли.
как указать циклу что данный проход последний
SenhionА почему бы не взять и закрыть?
закрыть скрипт.
Офлайн
0
Флаг поставитьА как это сделать правильно?
Офлайн
31
Поиск файла и запуск
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)#запуск файла
# -*- 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")
os.remove("C:\\Temp\\test.txt")
os.path.exists(filename)
Отредактировано sanodin (Авг. 30, 2012 22:38:41)
Офлайн
14
sanodinСырые строки же.
“C:\\Temp\\test.txt”
Офлайн
0
А флаг,если файл обработан с нужным тебе условием -вернуть True, если вернули True - файл удалили
Офлайн
31
Все зависит от того как будет работать программа,если программа будет ждать появления файла,проводить его обработку и при наличии выполненного условия (файл обработан и удовлетворил ваши требования , продолжения сканирования данной директории на наличие такого файла не требуется),программа завершается.Ну а если Вы сами решаете нужно ли дальнейшее сканирование,то программа ждет Вашего вмешательства(ввода)
Офлайн
0
0. запускается скрипт
1. пока нет условия для выхода
1.1 Если файл есть
1.1.1 выполняем над файлом непотребства
1.1.2 выводим результат
1.1.3 удаляем файл
1.2 ждем 10 секунд
Пока у меня в голове вот такая схема и я плохо представляю как реализовать условия для выхода:
ну кроме например как проверять наличие файла stop.script в директории, но каждый раз создавать такой файл в ручную мне кажется не есть хороший стиль - возможно есть более правильный путь?
Да - условие завершения скрипта определяется оператором, и скрипт не может быть завершен с момента начала обработки файла и до удаления обрабатываемого файла.
Отредактировано Senhion (Сен. 5, 2012 08:51:24)
Офлайн