Уведомления

Группа в Telegram: @pythonsu

#1 Март 2, 2011 09:52:46

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Скрипт для удаления файлов старше N дней

pyuser
тогда уж и argparse прикрутить
В идеале да. Но на практике, для админа оно обычно не важно.
А вот перенаправить лог в /var/log без особых сложностей бывает очень важно.



Офлайн

#2 Март 2, 2011 11:36:57

zloymih
От:
Зарегистрирован: 2011-03-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт для удаления файлов старше N дней

Поправил скрипт, с учетом замечаний. С логами кажется перемудрил… :) Может попроще можно сделать? Хотелось чтоб и на экраны выводилось и в файл.

ZZZ
Ещё момент… Не надо в try такой здоровый кусок кода вписывать
Выделяю такой кусок, потому, что если прав доступа к файлу нет, то программа вываливается при попытке получить время изменения файла
d2 = datetime.datetime.fromtimestamp(os.path.getmtime(file))
Или в этом случае на 2 try разбить??



Офлайн

#3 Март 2, 2011 12:30:03

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт для удаления файлов старше N дней

ZZZ
indus
не обязательно. конкретное исключение имеет смысл отлавливать только тогда, когда нужна конкретная информация об исключении :) во всех остальных случаях все сливается в /dev/null
Я не понял смысла фразы. Так или иначе, ловить все исключения (или Exception), это очень плохая практика.
Тут куда правильнее отловить только OSError, а во всех остальных случаях просто грохнуться с соответствующим матом. А то наличие реальной ошибки может быть замечено лишь тогда, когда с файлами уже произойдёт нечто страшное. В Дзен на эту тему есть: Errors should never pass silently.
попробую пояснить. когда я делаю так:

    try:
do smthing
except:
pass or return with specific error code
…я не ловлю исключения, а избавляюсь от них + использую как способ вернуть код ошибки там, где это не реализовано (т.е. например если ф-ция не возвращает а выкидывает исключение). в общем-то распространенные приемы. в одной из своих тем, я уже выразил свое Фи тому, как питон на мой взгляд слишком часто использует исключения, где надо и где не надо - где можно было бы обойтись возвратом заведомо неверного значения (классика жанра).

но, вообще, Питон многое взял от Жавы, поэтому я смирился и просто стараюсь Жава-лайк кривизну обходить наиболее естественными для меня способами ;) да и код зачастую “чище”, без всяких там подразумеваний и недомолвок.
извините за оффтопик.



Офлайн

#4 Март 2, 2011 12:41:07

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Скрипт для удаления файлов старше N дней

Не брал Питон он Явы - он ее немного старше. :) Исключения были с самого начала (правда, только строковые).
Борьба с исключениями - это очень сильный ход. И оригинальный, к тому же. Во всем остальном мире ведут борьбу за повсеместное применение исключений как сигнализации об ошибке. В целях как раз уйти от недомолвок и неоднозначностей.
Вам как, применение классов не жмет?



Офлайн

#5 Март 2, 2011 12:53:20

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт для удаления файлов старше N дней

Андрей Светлов
в умных книжках по Питону пишут что взял от Жавы кое какие концецпии. Да и ООП у него больше жавское чем С++. естественно Питон старше Жавы, только причем здесь это? ;)
Я не брюсь с исключениями, вы либо не внимательно прочитали либо опять меня не поняли =) В том что я написал нет ничего оригинального уже очень давно =))) иначе я бы с удвольствием запатентовал ;)
Применение классов не жмет уже хрен знает сколько лет. А почему такой странный вопрос?



Офлайн

#6 Март 2, 2011 13:06:06

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Скрипт для удаления файлов старше N дней

Исключения к заимствованным из Явы концепциям не относятся. То же касается и ООП.
Возврат заведомо неверного кода ошибки - да, классика жанра. Как и использование, например, errno для последующей расшифровки.
Но применение этого способа поверх уже существующих исключений - действительно новое слово в программировании. Можете смело патентовать!



Офлайн

#7 Март 2, 2011 13:12:26

zloymih
От:
Зарегистрирован: 2011-03-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт для удаления файлов старше N дней

Ну, пошел флуд :). Я конечно не против - это порой бывает интересно, но все-таки подскажите - логи я правильно обрабатываю? Дайте пищи для ума ;)



Офлайн

#8 Март 2, 2011 13:26:16

indus
От:
Зарегистрирован: 2011-02-07
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт для удаления файлов старше N дней

Андрей Светлов
что касается заимствований из Жавы, сейчас кроме мусорщика пока вспомнить ничего не могу, попадется что-то на глаза - запомню для дальнейших бесед =)
Естественно сами исключения и ООП не могут быть Жавскими, С++, Смаллталковскими и т.п., я имел ввиду их реализацию.
Возврат заведомо неверного кода ошибки в Питоне используется наравне с исключениями. Более того, я иногда не вижу логики автора того или иного метода при выборе между исключением или возвратом значения. Похоже это очередная борьба бобра со злом, в том смысле что исключения использовать “более правильнее в ООП” =)))))

И мне совсем не понятна ваша негативная реакция на такое использование исключений, которое я описал. Этот подход используется с начала времен появления исключений вообще. Описан в куче учебников, рекомендуется многими (не в пример мне) мудрыми гуру, используется чуть менее чем везде ( внутри того же Питона, на этом форуме ;)) Тем более если это _единственный_ способ вернуть код ошибки (иногда, предствьте себе, в рамках какой-либо конкретной системы требуется именно это!), а метод использует только исключение(-я) - приходится создавать враппер и разворачивать сие недоразумение.
Так что все таки запатентовать не получится, еще сто лет назад такие монстры как Керниган уже поюзали этот способ =)



Офлайн

#9 Март 2, 2011 13:29:24

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Скрипт для удаления файлов старше N дней

А вы все первое сообщение правите? Как-то незаметно.
Конфигурируйте корневой логер, который logging.getLogger()
А пишите в свой, как и сейчас поступаете.
Вместо
my_logger.info(“%s %s %s был удален” % (file.ljust(60),d2.strftime(“%Y-%m-%d %H:%M:%S”),days_diff))
Бывает удобно писать
my_logger.info(“%s %s %s был удален”, file.ljust(60), d2.strftime(“%Y-%m-%d %H:%M:%S”), days_diff)

Не называйте d1, d2. Придумайте более говорящие названия. Испытываете проблемы с английским - пишите по русски.



Офлайн

#10 Март 2, 2011 14:36:23

zloymih
От:
Зарегистрирован: 2011-03-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт для удаления файлов старше N дней

Андрей Светлов
Конфигурируйте корневой логер, который logging.getLogger()
Честно, не совсем понял, как это сделать. Взял пример отсюда http://docs.python.org/dev/howto/logging-cookbook.html. В целом я доволен результатом.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version