(Linux)iwatch使用文件名

时间:2016-01-03 15:15:15

标签: python linux character-encoding

我已经设置了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(触摸ÄÖÜäöüß)被解雇时,我得到了

----------------------------------------
{'confidence': 0.99, 'encoding': 'utf-8'}
<type 'str'> /root/Desktop/test/ÃÃÃäöüÃ
<type 'unicode'> /root/Desktop/test/ÃÃÃäöüÃ

我对编码知之甚少:/

我如何在这里获得可读的内容?

我已经尝试了所有我能找到的东西(以千种方式编码/解码),但没有把它想象出来。有人能帮助我吗?每个建议都将不胜感激!非常感谢你!

1 个答案:

答案 0 :(得分:0)

新:

这个家伙为iwatch写了一个补丁。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=608843

两个提供的补丁都适合我。

Patch 2给出了... pragma已弃用...警告。

旧:

改变策略,我将围绕pyinotify重建。这很棒!

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()