Mageia Bugzilla – Attachment 7516 Details for
Bug 17856
Filter devices without medium
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
New Account
|
Forgot Password
Script to detect devices
test-udisk.py (text/x-python), 4.19 KB, created by
papoteur
on 2016-03-05 22:51:20 CET
(
hide
)
Description:
Script to detect devices
Filename:
MIME Type:
Creator:
papoteur
Created:
2016-03-05 22:51:20 CET
Size:
4.19 KB
patch
obsolete
>#!/usr/bin/python >import os, re >import io, dbus > > >class NoUDisks2(Exception): > pass > > >class UDisks2(object): > > BLOCK = 'org.freedesktop.UDisks2.Block' > FILESYSTEM = 'org.freedesktop.UDisks2.Filesystem' > DRIVE = 'org.freedesktop.UDisks2.Drive' > > def __init__(self): > self.bus = dbus.SystemBus() > try: > self.bus.get_object('org.freedesktop.UDisks2', > '/org/freedesktop/UDisks2') > except dbus.exceptions.DBusException as e: > if getattr(e, '_dbus_error_name', None) == 'org.freedesktop.DBus.Error.ServiceUnknown': > raise NoUDisks2() > raise > > def device(self, device_node_path): > device_node_path = os.path.realpath(device_node_path) > devname = device_node_path.split('/')[-1] > > # First we try a direct object path > bd = self.bus.get_object('org.freedesktop.UDisks2', > '/org/freedesktop/UDisks2/block_devices/%s'%devname) > try: > device = bd.Get(self.BLOCK, 'Device', > dbus_interface='org.freedesktop.DBus.Properties') > device = bytearray(device).replace(b'\x00', b'').decode('utf-8') > except: > device = None > > if device == device_node_path: > return bd > > # Enumerate all devices known to UDisks2 > devs = self.bus.get_object('org.freedesktop.UDisks2', > '/org/freedesktop/UDisks2/block_devices') > xml = devs.Introspect(dbus_interface='org.freedesktop.DBus.Introspectable') > for dev in re.finditer(r'name=[\'"](.+?)[\'"]', type(u'')(xml)): > bd = self.bus.get_object('org.freedesktop.UDisks2', > '/org/freedesktop/UDisks2/block_devices/%s2'%dev.group(1)) > try: > device = bd.Get(self.BLOCK, 'Device', > dbus_interface='org.freedesktop.DBus.Properties') > device = bytearray(device).replace(b'\x00', b'').decode('utf-8') > except: > device = None > if device == device_node_path: > return bd > > raise ValueError(_('%r not known to UDisks2')%device_node_path) > > def find_devices(self): > proxy = self.bus.get_object("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2") > iface = dbus.Interface(proxy, "org.freedesktop.UDisks2") > _udisks2_obj_manager = dbus.Interface(iface, "org.freedesktop.DBus.ObjectManager") > objects=_udisks2_obj_manager.GetManagedObjects() > re_drive = re.compile('(?P<path>.*?/drives/(?P<id>.*))') > re_block = re.compile('(?P<path>.*?/block_devices/(?P<id>.*))') > devs= [m.groupdict() for m in > [re_drive.match(path) for path in objects.keys()] > if m] > blocks = [m.groupdict() for m in > [re_block.match(path) for path in objects.keys()] > if m] > list=[] > output='' > > for dev in devs: > dev_obj =objects[dev['path']]['org.freedesktop.UDisks2.Drive'] > output += "ConnectionBus %s Removable %d MediaRemovable %d\n"%(dev_obj['ConnectionBus'],dev_obj['Removable'], dev_obj['MediaRemovable'] ) > if (dev_obj['ConnectionBus'] == 'usb' or dev_obj['ConnectionBus'] == 'sdio') and \ > (dev_obj['Removable'] == 1 or dev_obj['MediaRemovable'] == 1 ): > item=[] > vend = dev_obj['Vendor'] > name = dev_obj['Model'] > for block in blocks: > if dev['path'] == objects[block['path']]['org.freedesktop.UDisks2.Block']['Drive']: > path = '/dev/'+block['path'].split('/')[-1] > size = dev_obj['Size'] > item.append(vend+" "+name) > item.append(path) > item.append(size) > list.append(item) > self.device_nb=len(list) > return list, output > >def get_devices(): > u=UDisks2() > list,output = u.find_devices() > f = os.open('test_udisk.txt',os.O_RDWR|os.O_CREAT) > os.write(f, output) > for name, path, size in list: > # convert in Mbytes > sizeM=str(int(size)/(1024*1024)) > os.write(f, name+' ('+path.lstrip()+') '+sizeM+'Mb\n') > > >get_devices()
#!/usr/bin/python import os, re import io, dbus class NoUDisks2(Exception): pass class UDisks2(object): BLOCK = 'org.freedesktop.UDisks2.Block' FILESYSTEM = 'org.freedesktop.UDisks2.Filesystem' DRIVE = 'org.freedesktop.UDisks2.Drive' def __init__(self): self.bus = dbus.SystemBus() try: self.bus.get_object('org.freedesktop.UDisks2', '/org/freedesktop/UDisks2') except dbus.exceptions.DBusException as e: if getattr(e, '_dbus_error_name', None) == 'org.freedesktop.DBus.Error.ServiceUnknown': raise NoUDisks2() raise def device(self, device_node_path): device_node_path = os.path.realpath(device_node_path) devname = device_node_path.split('/')[-1] # First we try a direct object path bd = self.bus.get_object('org.freedesktop.UDisks2', '/org/freedesktop/UDisks2/block_devices/%s'%devname) try: device = bd.Get(self.BLOCK, 'Device', dbus_interface='org.freedesktop.DBus.Properties') device = bytearray(device).replace(b'\x00', b'').decode('utf-8') except: device = None if device == device_node_path: return bd # Enumerate all devices known to UDisks2 devs = self.bus.get_object('org.freedesktop.UDisks2', '/org/freedesktop/UDisks2/block_devices') xml = devs.Introspect(dbus_interface='org.freedesktop.DBus.Introspectable') for dev in re.finditer(r'name=[\'"](.+?)[\'"]', type(u'')(xml)): bd = self.bus.get_object('org.freedesktop.UDisks2', '/org/freedesktop/UDisks2/block_devices/%s2'%dev.group(1)) try: device = bd.Get(self.BLOCK, 'Device', dbus_interface='org.freedesktop.DBus.Properties') device = bytearray(device).replace(b'\x00', b'').decode('utf-8') except: device = None if device == device_node_path: return bd raise ValueError(_('%r not known to UDisks2')%device_node_path) def find_devices(self): proxy = self.bus.get_object("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2") iface = dbus.Interface(proxy, "org.freedesktop.UDisks2") _udisks2_obj_manager = dbus.Interface(iface, "org.freedesktop.DBus.ObjectManager") objects=_udisks2_obj_manager.GetManagedObjects() re_drive = re.compile('(?P<path>.*?/drives/(?P<id>.*))') re_block = re.compile('(?P<path>.*?/block_devices/(?P<id>.*))') devs= [m.groupdict() for m in [re_drive.match(path) for path in objects.keys()] if m] blocks = [m.groupdict() for m in [re_block.match(path) for path in objects.keys()] if m] list=[] output='' for dev in devs: dev_obj =objects[dev['path']]['org.freedesktop.UDisks2.Drive'] output += "ConnectionBus %s Removable %d MediaRemovable %d\n"%(dev_obj['ConnectionBus'],dev_obj['Removable'], dev_obj['MediaRemovable'] ) if (dev_obj['ConnectionBus'] == 'usb' or dev_obj['ConnectionBus'] == 'sdio') and \ (dev_obj['Removable'] == 1 or dev_obj['MediaRemovable'] == 1 ): item=[] vend = dev_obj['Vendor'] name = dev_obj['Model'] for block in blocks: if dev['path'] == objects[block['path']]['org.freedesktop.UDisks2.Block']['Drive']: path = '/dev/'+block['path'].split('/')[-1] size = dev_obj['Size'] item.append(vend+" "+name) item.append(path) item.append(size) list.append(item) self.device_nb=len(list) return list, output def get_devices(): u=UDisks2() list,output = u.find_devices() f = os.open('test_udisk.txt',os.O_RDWR|os.O_CREAT) os.write(f, output) for name, path, size in list: # convert in Mbytes sizeM=str(int(size)/(1024*1024)) os.write(f, name+' ('+path.lstrip()+') '+sizeM+'Mb\n') get_devices()
View Attachment As Raw
Actions:
View
Attachments on
bug 17856
: 7516 |
7517