2010-09-25 25 views
3

Je viens de recevoir un iPad et j'ai bêtement eu l'application TexTouch. Bizarrement, parce qu'en raison de la réglementation Apple, TexTouch ne peut pas compiler Tex. Il synchronise le fichier .tex sur un ordinateur en utilisant Dropbox. Sur l'ordinateur distant, il est intercepté par un autre programme qui compile le fichier .tex en PDF et le renvoie. Mais (surprise!) Ce programme distant dans Windows et Mac seulement. Et je suis sur Linux. Alors j'ai pensé, pourquoi ne pas utiliser inotify? Pour rendre les choses un peu plus simples, j'ai utilisé pyinotify pour ne pas avoir à faire des tonnes de compilation. MAIS quand Dropbox dépose un fichier, voici, dans pyinotify vernacular, les événements qui se produisent. (De toute évidence, « premier doc.tex » est le nom du fichier que je suis la synchronisation.)Dropbox et pyinotify

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 > 

Que puis-je faire cela? Les seuls événements qui semblent uniques sont les événements IN_MOVE_FROM et IN_MOVE_TO. Mais cela ressemble à une idée BAD pour les surveiller. Existe-t-il un moyen de détecter un événement initié par Dropbox? Dois-je utiliser autre chose que inotify ou pyinotify?

Répondre

2

Eh bien, IN_OPEN (fichier ouvert pour la lecture), IN_ACCESS (accès au fichier) et IN_ATTRIB (attributs de fichier modifiés) ne sont évidemment pas ce dont vous avez besoin. IN_CLOSE_NOWRITE signifie que le fichier a été fermé pour lecture (c'est-à-dire qu'aucune modification n'a pu être effectuée), ce qui n'est donc pas ce dont vous avez besoin. Il faudra donc que ce soit IN_MOVED_FROM ou IN_MOVED_TO. Etes-vous sûr qu'il n'y a aucun autre événement qui se passe? Si vous l'êtes, le fichier est probablement créé ailleurs et déplacé vers son emplacement final au ~/Dropbox.

0

J'ai un script qui fonctionne pour IN_MOVED_TO. Chaque fois que Dropbox supprime un nouveau fichier, il est déclenché. Vous devriez utiliser 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 >