Dropbox 和 pyinotify
Posted
技术标签:
【中文标题】Dropbox 和 pyinotify【英文标题】:Dropbox and pyinotify 【发布时间】:2010-09-25 18:36:40 【问题描述】:我刚买了一台 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 以外的东西吗?
【问题讨论】:
【参考方案1】:好吧,IN_OPEN
(打开读取的文件)、IN_ACCESS
(访问的文件)和IN_ATTRIB
(修改的文件属性)显然不是你需要的。 IN_CLOSE_NOWRITE
表示该文件已关闭以供阅读(即无法进行任何更改),因此这也不是您所需要的。所以它必须是IN_MOVED_FROM
或IN_MOVED_TO
。
你确定没有其他事件发生吗?
如果是,那么该文件可能正在其他地方创建,然后被移动到其最终位置 ~/Dropbox
。
【讨论】:
【参考方案2】:我得到了一个监视 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 >
【讨论】:
以上是关于Dropbox 和 pyinotify的主要内容,如果未能解决你的问题,请参考以下文章