Найти - Пользователи
Полная версия: Скрипт для удаления файлов старше N дней
Начало » Python для новичков » Скрипт для удаления файлов старше N дней
1 2 3
ZZZ
pyuser
тогда уж и argparse прикрутить
В идеале да. Но на практике, для админа оно обычно не важно.
А вот перенаправить лог в /var/log без особых сложностей бывает очень важно.
zloymih
Поправил скрипт, с учетом замечаний. С логами кажется перемудрил… :) Может попроще можно сделать? Хотелось чтоб и на экраны выводилось и в файл.
ZZZ
Ещё момент… Не надо в try такой здоровый кусок кода вписывать
Выделяю такой кусок, потому, что если прав доступа к файлу нет, то программа вываливается при попытке получить время изменения файла
d2 = datetime.datetime.fromtimestamp(os.path.getmtime(file))
Или в этом случае на 2 try разбить??
indus
ZZZ
indus
не обязательно. конкретное исключение имеет смысл отлавливать только тогда, когда нужна конкретная информация об исключении :) во всех остальных случаях все сливается в /dev/null
Я не понял смысла фразы. Так или иначе, ловить все исключения (или Exception), это очень плохая практика.
Тут куда правильнее отловить только OSError, а во всех остальных случаях просто грохнуться с соответствующим матом. А то наличие реальной ошибки может быть замечено лишь тогда, когда с файлами уже произойдёт нечто страшное. В Дзен на эту тему есть: Errors should never pass silently.
попробую пояснить. когда я делаю так:

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

но, вообще, Питон многое взял от Жавы, поэтому я смирился и просто стараюсь Жава-лайк кривизну обходить наиболее естественными для меня способами ;) да и код зачастую “чище”, без всяких там подразумеваний и недомолвок.
извините за оффтопик.
Андрей Светлов
Не брал Питон он Явы - он ее немного старше. :) Исключения были с самого начала (правда, только строковые).
Борьба с исключениями - это очень сильный ход. И оригинальный, к тому же. Во всем остальном мире ведут борьбу за повсеместное применение исключений как сигнализации об ошибке. В целях как раз уйти от недомолвок и неоднозначностей.
Вам как, применение классов не жмет?
indus
Андрей Светлов
в умных книжках по Питону пишут что взял от Жавы кое какие концецпии. Да и ООП у него больше жавское чем С++. естественно Питон старше Жавы, только причем здесь это? ;)
Я не брюсь с исключениями, вы либо не внимательно прочитали либо опять меня не поняли =) В том что я написал нет ничего оригинального уже очень давно =))) иначе я бы с удвольствием запатентовал ;)
Применение классов не жмет уже хрен знает сколько лет. А почему такой странный вопрос?
Андрей Светлов
Исключения к заимствованным из Явы концепциям не относятся. То же касается и ООП.
Возврат заведомо неверного кода ошибки - да, классика жанра. Как и использование, например, errno для последующей расшифровки.
Но применение этого способа поверх уже существующих исключений - действительно новое слово в программировании. Можете смело патентовать!
zloymih
Ну, пошел флуд :). Я конечно не против - это порой бывает интересно, но все-таки подскажите - логи я правильно обрабатываю? Дайте пищи для ума ;)
indus
Андрей Светлов
что касается заимствований из Жавы, сейчас кроме мусорщика пока вспомнить ничего не могу, попадется что-то на глаза - запомню для дальнейших бесед =)
Естественно сами исключения и ООП не могут быть Жавскими, С++, Смаллталковскими и т.п., я имел ввиду их реализацию.
Возврат заведомо неверного кода ошибки в Питоне используется наравне с исключениями. Более того, я иногда не вижу логики автора того или иного метода при выборе между исключением или возвратом значения. Похоже это очередная борьба бобра со злом, в том смысле что исключения использовать “более правильнее в ООП” =)))))

И мне совсем не понятна ваша негативная реакция на такое использование исключений, которое я описал. Этот подход используется с начала времен появления исключений вообще. Описан в куче учебников, рекомендуется многими (не в пример мне) мудрыми гуру, используется чуть менее чем везде ( внутри того же Питона, на этом форуме ;)) Тем более если это _единственный_ способ вернуть код ошибки (иногда, предствьте себе, в рамках какой-либо конкретной системы требуется именно это!), а метод использует только исключение(-я) - приходится создавать враппер и разворачивать сие недоразумение.
Так что все таки запатентовать не получится, еще сто лет назад такие монстры как Керниган уже поюзали этот способ =)
Андрей Светлов
А вы все первое сообщение правите? Как-то незаметно.
Конфигурируйте корневой логер, который 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. Придумайте более говорящие названия. Испытываете проблемы с английским - пишите по русски.
zloymih
Андрей Светлов
Конфигурируйте корневой логер, который logging.getLogger()
Честно, не совсем понял, как это сделать. Взял пример отсюда http://docs.python.org/dev/howto/logging-cookbook.html. В целом я доволен результатом.
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