Dropbox и pyinotify - PullRequest
       32

Dropbox и pyinotify

3 голосов
/ 25 сентября 2010

Я только что получил iPad и по-дурацки получил приложение TexTouch.Глупо, потому что из-за правил Apple, TexTouch не может скомпилировать Tex. Он синхронизирует файл .tex с компьютером с помощью Dropbox.На удаленном компьютере его ловит другая программа, которая компилирует файл .tex в PDF и отправляет его обратно.Но (удивительно!) Эта удаленная программа только для Windows и Mac.И я на Linux.Вот я и подумал, а почему бы не использовать inotify?Чтобы упростить ситуацию, я фактически использовал pyinotify, поэтому мне не пришлось бы разбираться с кучей компиляций.НО, когда Dropbox удаляет файл, здесь, на языке pyinotify, все события, которые происходят.(Очевидно, «first doc.tex» - это имя файла, который я синхронизирую.)

event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event cookie=151401 dir=False mask=0x40 maskname=IN_MOVED_FROM name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event cookie=151402 dir=False mask=0x80 maskname=IN_MOVED_TO name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x4 maskname=IN_ATTRIB name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x20 maskname=IN_OPEN name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x1 maskname=IN_ACCESS name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >
event: <Event dir=False mask=0x10 maskname=IN_CLOSE_NOWRITE name=first doc.tex path=/home/eje211/Dropbox/TexTouch pathname=/home/eje211/Dropbox/TexTouch/first doc.tex wd=1 >

Что я могу сделать из этого?Единственными событиями, которые кажутся уникальными, являются события IN_MOVE_FROM и IN_MOVE_TO.Но похоже, что это ПЛОХАЯ идея контролировать их.Есть ли способ обнаружить событие, инициированное Dropbox?Должен ли я использовать что-то кроме inotify или pyinotify?

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Ну, IN_OPEN (файл открыт для чтения), IN_ACCESS (файл доступен) и IN_ATTRIB (атрибуты файла изменены) явно не то, что вам нужно.IN_CLOSE_NOWRITE означает, что файл был закрыт для чтения (т. Е. Изменения не могли быть внесены), так что это также не то, что вам нужно.Так что это должно быть либо IN_MOVED_FROM, либо IN_MOVED_TO.Вы уверены, что никаких других событий не происходит?Если да, то файл, вероятно, создается где-то еще, а затем перемещается в его окончательное местоположение в ~/Dropbox.

0 голосов
/ 30 марта 2017

У меня работает скрипт, который следит за IN_MOVED_TO.Всякий раз, когда Dropbox удаляет новый файл, он запускается.Вы должны использовать IN_MOVED_TO.

<Event cookie=63896 dir=False mask=0x80 maskname=IN_MOVED_TO name=test.zip path=/home/bpotter/Dropbox/Apps/Backup pathname=/home/bpotter/Dropbox/Apps/Backup/test.zip wd=1 >
...