Вопрос

Я только что получил iPad, и я по глупости получил приложение Textouch. По глупости, потому что благодаря регулированию Apple Textouch не может компилировать Tex. Он синхронизирует файл .tex к компьютеру с помощью dropbox. На далеком компьютере он попадает в другой программе, которая компилирует файл .tex к pdf и отправляет его обратно. Но (сюрприз!) Эта далекая программа в Windows и Mac только. И я на Linux. Поэтому я подумал, почему бы не использовать Inotify? Чтобы сделать вещи немного проще, я на самом деле использовал Pyinotify, поэтому мне не придется иметь дело с тоннами компиляции. Но когда Dropbox падает файл, вот, в Pyinotify Vernacular, события, которые происходят. (Очевидно, что «первый 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?

Это было полезно?

Решение

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

Другие советы

У меня есть сценарий, работающий, который часы для 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 >
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top