2009-02-28 3 views
49

Я ищу кросс-платформенный пакет мониторинга файлов python? Я знаю, что можно контролировать файлы на окнах с помощью pywin32, и есть пакеты, работающие в Linux/Unix, но кто-нибудь знает о кросс-платформенном?Мониторинг содержимого файлов/каталогов?

+1

Tim Golden имеет очень простой метод кросс-платформенную опроса директории с os.listdir здесь: http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html – bernie

+2

Что означает «монитор»? Просьба указать какой-то намек на то, что вы пытаетесь сделать. –

ответ

29

Для систем на основе Unix/Linux вы должны использовать File Alteration Monitor Python bindings для libfam.

Для систем на базе Windows вы должны привязать к Win32 API FindFirstChangeNotification и связанным с ним функциям.

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

+1

Не могли бы вы объяснить, как использовать API W32 в примере ... потому что я этого не понимаю ... – wishi

2

Я нашел эту ссылку, которая рассказывает о вашей проблеме. Хотя на самом деле это не обеспечивает решение s/library, я думаю, что это поможет. http://www.stepthreeprofit.com/2008/06/cross-platform-monitoring-of-filesystem.html

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

Я неопытный в этой области, поэтому я не уверен. Надеюсь, это поможет.

Примечание
я исправлюсь, беспризорник доступно на Cygwin, как Адам Бернье указал мне в комментарии. Возможно, вам захочется изучить другие варианты cygwin (если они существуют).

+0

Кажется, это хорошая обратная связь для Gamin на Linux. FWIW, Gamin указан в пакетах cygwin: http://cygwin.com/packages/ – bernie

+0

А! Cygwin! Я об этом не думал. Я стою исправлено. – batbrat

0

Самый простой способ использования Linux - использовать inotifywait (учитывая, что ваше ядро ​​достаточно недавно). Вам не нужны специальные привязки, inotifywait может быть настроен для печати выходных строк на стандартном выходе любым способом. Посмотрите и this question для хорошего примера.

+0

Он специально упомянул кросс-платформу.inotifywait только для linux –

81

Я работаю над лицензированной лицензией MIT, которая помогает программам Python отслеживать события файловой системы как можно более портативно. Есть различия, которые я пытаюсь сгладить. Очень альфа-версия на данный момент:

Посмотрите здесь: http://github.com/gorakhargosh/watchdog/

Патчи и взносы приветствуются.

Надеюсь, это поможет. =) Приветствия.

+0

Большое спасибо, я искал кросс-платформенное решение, и сторожевой таймер действительно полезен! – mtrovo

+0

Когда это будет доступно для python3? – avendael

+3

@avendael - Теперь, видимо. В данный момент он поддерживает py3k. –

4

Также проверьте этот вариант:

http://pypi.python.org/pypi/watchdog

Использовался с приложением кросс-платформенных на Windows, и OS X.

+3

Возможно, потому что автор сторожевого пса отправлен об этом в ответ год назад, и в этом ответе мало? Наверное, не стоит нисходящего, но не слишком дорого стоит. – fencepost

+1

Мне это нравится, потому что он сказал, что использовал его, и все в порядке. – droope

+0

Я никогда не понимаю, почему ответ получил вниз. Вот использование сторожевого таймера: http://pythonhosted.org/watchdog/quickstart.html – swdev