Seite 1 von 1

dbus-python buggy?

Verfasst: Dienstag 22. August 2017, 12:09
von AngelusNoctis
Hi,

Hab ein kleines Problem mit dbus-python und udisk2 und zwar stimmt irgendwas mit der Kommunikation nicht.

Hatte dazu das kleine Scrip hier gefunden (Siehe unten), was auch klappt bis ich "/dev/sdc" erreichen sollte.

Dann springt das ganze von "block_devices" auf "drives" weshalb auch immer, obwohl klar mit "org.freedesktop.UDisks2.Block" und nicht mit "org.freedesktop.UDisks2.Drive" kommuniziert wird.

Man beachte die "print k" Ausgabe.

Kann mir einer klären was zur Hölle da schief läuft?

Code: Alles auswählen

#!/usr/bin/python2.7
# coding: utf-8
import dbus


def get_usb():
    devices = []
    bus = dbus.SystemBus()
    ud_manager_obj = bus.get_object('org.freedesktop.UDisks2', '/org/freedesktop/UDisks2')
    om = dbus.Interface(ud_manager_obj, 'org.freedesktop.DBus.ObjectManager')
    for k,v in om.GetManagedObjects().iteritems():
        print k
        drive_info = v.get('org.freedesktop.UDisks2.Block', {})
        device = bytearray(drive_info.get('Device')).replace(b'\x00', b'')
        devices.append(device)

Code: Alles auswählen

==================== RESTART: /home/pycoder/dbus-test.py ====================
/org/freedesktop/UDisks2/block_devices/sdb1
/org/freedesktop/UDisks2/block_devices/sda
/org/freedesktop/UDisks2/block_devices/sr0
/org/freedesktop/UDisks2/block_devices/sda1
/org/freedesktop/UDisks2/block_devices/sda2
/org/freedesktop/UDisks2/block_devices/sda3
/org/freedesktop/UDisks2/block_devices/sda4
/org/freedesktop/UDisks2/block_devices/sdb3
/org/freedesktop/UDisks2/block_devices/sdb2
/org/freedesktop/UDisks2/drives/Samsung_SSD_840_EVO_1TB_S1D9NSAF720159W

Traceback (most recent call last):
  File "/home/pycoder/dbus-test.py", line 52, in <module>
    dev = get_usb()
  File "/home/pycoder/dbus-test.py", line 14, in get_usb
    device = bytearray(drive_info.get('Device')).replace(b'\x00', b'')
TypeError: 'NoneType' object is not iterable

Re: dbus-python buggy?

Verfasst: Dienstag 22. August 2017, 15:03
von BlackJack
@AngelusNoctis: `GetManagedObjects` liefert alle von `UDisk2` verwalteten Objekte und das sind nun mal `drives` *und* `block_devices`. Und dann versuchst Du ganz klar *alle* als `Block` anzusprechen — auch die Drives die dieses Interface nicht implementieren.

Re: dbus-python buggy? [solved]

Verfasst: Donnerstag 24. August 2017, 16:15
von AngelusNoctis
Oh, mein Fehler.

Hab mich eben noch nicht so richtig mit D-Bus beschäftigt und fand das Script bei stackoverflow.

Hätte es mehr anschauen müssen.

Danke :)