我已经设置iWatch来监视某个目录。我想执行自己的脚本,而不是发邮件给我。一切都很顺利,直到一些特殊人物出现。
iwatch-f iwatch.xml
其中iwatch.xml是
[...]
<path type="recursive" alert="off" events="close_write" exec="commit '%f'">/user/Desktop/test</path>
[...]
提交程序:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import chardet,sys
print 40*"-"
print chardet.detect(sys.argv[1])
print type(sys.argv[1]), sys.argv[1]
uni = unicode(sys.argv[1], sys.getfilesystemencoding())
print type(uni), uni
所以,当我运行“commit嗲嗲嗲嗲嗲嗲”时,一切都很好
----------------------------------------
{'confidence': 0.99, 'encoding': 'utf-8'}
<type 'str'> ÄÖÜäöüß
<type 'unicode'> ÄÖÜäöüß
但是,当它被iwatch(touch______)解雇时,我会
----------------------------------------
{'confidence': 0.99, 'encoding': 'utf-8'}
<type 'str'> /root/Desktop/test/ÃÃÃäöüÃ
<type 'unicode'> /root/Desktop/test/ÃÃÃäöüÃ
我对编码知之甚少:/
我怎么才能把我的可读材料拿到这里?
我已经尝试了所有我能找到的东西(以千种方式编码/解码),但没有成功。有人能帮我吗?任何建议都将不胜感激!非常感谢!
最佳答案
新
这家伙给iWatch写了一个补丁。
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=608843
两个补丁都对我有效。
补丁2给出了一个…不推荐使用pragma…警告。
旧的:
改变了策略,我会在皮诺蒂菲周围重建。这很管用!
import pyinotify
wm = pyinotify.WatchManager()
mask = pyinotify.IN_CLOSE_WRITE
class EventHandler(pyinotify.ProcessEvent):
def process_IN_CLOSE_WRITE(self, event):
print "Wrote:", event.pathname
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch('/root/Desktop/test', mask, rec=True)
notifier.loop()
关于python - (Linux)iwatch使用文件名中的特殊字符执行python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34578048/