Hallo, ich habe ein in einem Upstart-Skript eingebettetes Python-Skript (wie hier beschrieben: http://upstart.ubuntu.com/cookbook/#running-a-script-section-with-python ), das pyudev 0.16 nutzt um das Anstecken von Eingabegeräten zu überwachen. Beim Anstecken eines Geräts mit nicht-ASCII Zeichen im Namen gibt es diese Fehlermeldung, wenn ich versuche den Gerätenamen ins syslog zu schreiben:
1 2 3 4 5 6 7 8 9 10 11 | [...] def udev_event(self,observer,action, device): '''callback function to add/remove input devices''' if action == "add" and 'DEVNAME' in device: syslog.syslog("added %s"%device['DEVNAME']) if not "eventlircd_enable" in device: self.paths[device['DEVNAME']] = open(device['DEVNAME'],'rb') print sys.getfilesystemencoding() syslog.syslog(codecs.encode(u"watching %s: %s - %s"%(device.parent['NAME'], device['DEVNAME'],self.paths[device['DEVNAME']]),'utf-8')) self.devices[device['DEVNAME']] = gobject.io_add_watch(self.paths[device['DEVNAME']], gobject.IO_IN, self.evthandler) [...] |
Traceback (most recent call last): File "<stdin>", line 221, in udev_event File "/usr/lib/python2.7/dist-packages/pyudev/device.py", line 832, in __getitem__ return ensure_unicode_string(value) File "/usr/lib/python2.7/dist-packages/pyudev/_util.py", line 66, in ensure_unicode_string value = value.decode(sys.getfilesystemencoding()) UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 33: ordinal not in range(128)
Das Problem scheint zu sein, dass Python innerhalb des Upstart-Job für
sys.getfilesystemencoding()
immer "ANSI_X3.4-1968" ausgibt, in der Shell hingegen richtigerweise "UTF-8"
Hat jemand eine Idee, warum Python - wenn es innerhalb des Upstart-Job ausgeführt wird - das Default-Encoding des Filesystem nicht richtig erkennt (ein export LC_CTYPE=de_DE.UTF-8 scheint das Problem zu lösen)?