2010-09-25 5 views
3

У меня только iPad, и я по глупости получил приложение TexTouch. Глупо, потому что из-за регулировки Apple TexTouch не может скомпилировать Tex. Он синхронизирует файл .tex с компьютером с помощью Dropbox. На удаленном компьютере его захватывает другая программа, которая компилирует файл .tex в PDF и отправляет ее обратно. Но (удивление!), Что удаленная программа только в Windows и Mac. И я на Linux. Поэтому я подумал, почему бы не использовать inotify? Чтобы сделать вещи немного проще, я фактически использовал pyinotify, поэтому мне не пришлось бы разбираться с тоннами компиляции. НО, когда Dropbox бросает файл, вот, в pyinotify vernacular, происходят события. (Очевидно, что «первая doc.tex» это имя файла я синхронизации.)Dropbox and 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 > 

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

ответ

2

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

0

У меня есть сценарий, работающий над 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 >