Frage

Ich habe gerade ein iPad und ich habe dummerweise die TexTouch Anwendung. Dummerweise, weil wegen Apple-Regulierung kann TexTouch nicht Tex kompilieren. Es synchronisiert die .tex-Datei auf einem Computer mit Dropbox. Auf dem entfernten Computer, wird es von einem anderen Programm gefangen, der die .tex-Datei zu PDF kompiliert und sendet sie zurück. Aber (Überraschung!), Dass entferntes Programm in Windows und Mac nur. Und ich bin auf Linux. Also dachte ich, verwenden warum nicht inotify? Um die Dinge ein bisschen einfacher, habe ich eigentlich pyinotify so würde ich nicht mit Tonnen von Kompilierung zu tun haben. Aber wenn Dropbox eine Datei fällt, sind hier, in pyinotify Mundart, die Ereignisse, die geschehen. (Offensichtlich „erste doc.tex“ ist der Name der Datei, ich synchronisieren.)

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 >

Was kann ich davon? Die einzigen Ereignisse, die einzigartig zu sein scheinen sind die IN_MOVE_FROM und IN_MOVE_TO Veranstaltungen. Aber es sieht aus wie eine schlechte Idee diejenigen zu überwachen. Gibt es eine Möglichkeit, ein Ereignis zu detektieren, die von Dropbox eingeleitet wird? Sollte ich etwas anderes als inotify verwenden oder pyinotify?

War es hilfreich?

Lösung

Nun, IN_OPEN (Datei zum Lesen geöffnet), IN_ACCESS (Datei zugegriffen wird) und IN_ATTRIB (Dateiattribut geändert) ist offensichtlich nicht das, was Sie brauchen. IN_CLOSE_NOWRITE bedeutet, dass die Datei zum Lesen geschlossen wurde (das heißt keine Änderungen vorgenommen worden sein könnten), so dass die auch nicht das, was Sie brauchen. Also es haben Sie entweder IN_MOVED_FROM oder IN_MOVED_TO sein. Sind Sie sicher, dass es keine andere Ereignisse auch immer passiert? Wenn Sie sind, dann wird die Datei wahrscheinlich irgendwo anders erstellt werden und dann in seine endgültige Lage am ~/Dropbox bewegt wird.

Andere Tipps

habe ich ein Skript arbeiten, die Uhren für IN_MOVED_TO. Jedes Mal, wenn Dropbox eine neue Datei fällt, wird es ausgelöst. Sie sollten IN_MOVED_TO verwenden.

<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 >
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top