Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 30, 2012 08:42:09

Senhion
Зарегистрирован: 2012-08-13
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

Доброго времени суток.
Подскажите пожалуйста, как правильно реализовать выполнение скрипта если в директории появился определенный файл ?

т.е.
0. ждем когда файл появится.
1. появился файл 1.txt
2. выполнился скрипт который за собой этот файл удалил.
3. ждем когда файл появится снова.

Офлайн

#2 Авг. 30, 2012 10:00:37

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

А в чем проблема-то? В цикле проверяете наличие файла, при появлении выполняете скрипт и удаляете файл. Алгоритм у вас уже написан.

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



Офлайн

#3 Авг. 30, 2012 10:17:22

Senhion
Зарегистрирован: 2012-08-13
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

fata1ex
А в чем проблема-то? В цикле проверяете наличие файла, при появлении выполняете скрипт и удаляете файл. Алгоритм у вас уже написан.

Спасибо за подсказки.

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

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

Офлайн

#4 Авг. 30, 2012 10:37:42

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

Senhion
как указать циклу что данный проход последний
Флаг поставить. Или в яве интересная вещь есть interrupt(), будит из sleep(), может и на питон перенесли.

Senhion
закрыть скрипт.
А почему бы не взять и закрыть?

Офлайн

#5 Авг. 30, 2012 11:39:51

Senhion
Зарегистрирован: 2012-08-13
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

Флаг поставить
А как это сделать правильно?

Офлайн

#6 Авг. 30, 2012 22:18:11

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

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

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)#запуск файла

следит за файлами в папке 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")

Удалить

	
os.remove("C:\\Temp\\test.txt")

проверить существование
файла
	
os.path.exists(filename)

А флаг,если файл обработан с нужным тебе условием -вернуть True, если вернули True - файл удалили

Отредактировано sanodin (Авг. 30, 2012 22:38:41)

Офлайн

#7 Авг. 31, 2012 04:40:12

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

sanodin
“C:\\Temp\\test.txt”
Сырые строки же.

Офлайн

#8 Авг. 31, 2012 10:06:52

Senhion
Зарегистрирован: 2012-08-13
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

А флаг,если файл обработан с нужным тебе условием -вернуть True, если вернули True - файл удалили

Так вопрос - как поставить флаг в момент выполнения цикла?…

Офлайн

#9 Авг. 31, 2012 16:32:48

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

Все зависит от того как будет работать программа,если программа будет ждать появления файла,проводить его обработку и при наличии выполненного условия (файл обработан и удовлетворил ваши требования , продолжения сканирования данной директории на наличие такого файла не требуется),программа завершается.Ну а если Вы сами решаете нужно ли дальнейшее сканирование,то программа ждет Вашего вмешательства(ввода)

Офлайн

#10 Сен. 5, 2012 08:48:18

Senhion
Зарегистрирован: 2012-08-13
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Выполнение скрипта при наличии файла в директории

0. запускается скрипт
1. пока нет условия для выхода
1.1 Если файл есть
1.1.1 выполняем над файлом непотребства
1.1.2 выводим результат
1.1.3 удаляем файл
1.2 ждем 10 секунд

Пока у меня в голове вот такая схема и я плохо представляю как реализовать условия для выхода:
ну кроме например как проверять наличие файла stop.script в директории, но каждый раз создавать такой файл в ручную мне кажется не есть хороший стиль - возможно есть более правильный путь?

Да - условие завершения скрипта определяется оператором, и скрипт не может быть завершен с момента начала обработки файла и до удаления обрабатываемого файла.

Отредактировано Senhion (Сен. 5, 2012 08:51:24)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version