Dropbox和pyinotify

时间:2010-09-25 18:36:40

标签: dropbox inotify pyinotify

我刚买了一台iPad,我愚蠢地得到了TexTouch应用程序。愚蠢的是,由于Apple规定,TexTouch无法编译Tex。它使用Dropbox将.tex文件同步到计算机。在远程计算机上,它被另一个程序捕获,该程序将.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 个答案:

答案 0 :(得分:2)

好吧,IN_OPEN(为阅读而打开的文件),IN_ACCESS(文件访问)和IN_ATTRIB(文件属性已修改)显然不是您所需要的。 IN_CLOSE_NOWRITE表示文件已关闭以供阅读(即无法进行任何更改),因此这也不是您所需要的。因此,它必须是IN_MOVED_FROMIN_MOVED_TO。 你确定没有其他事件发生吗? 如果是,那么该文件可能正在其他地方创建,然后被移动到~/Dropbox的最终位置。

答案 1 :(得分: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 >