2024-05-19 20:53:48 发布
网友
很明显,使用udisks二进制文件可以获得与附加磁盘相关的许多信息:
udisks --show-info /dev/sda1
udisks显然只是枚举udev可用的数据。
是否可以使用python获取这些信息?举个例子,如果我只想检索设备序列号、安装点和大小。
如果所有其他操作都失败,则可以分析udisks的输出。下面是Python3.2中的一个脚本示例:
udisks
from subprocess import check_output as qx from configparser import ConfigParser def parse(text): parser = ConfigParser() parser.read_string("[DEFAULT]\n"+text) return parser['DEFAULT'] def udisks_info(device): # get udisks output out = qx(['udisks', '--show-info', device]).decode() # strip header & footer out = out[out.index('\n')+1:] i = out.find('=====') if i != -1: out = out[:i] return parse(out) info = udisks_info('/dev/sda1') print("size = {:.2f} GiB".format(info.getint('size')/2**30)) print("""mount point = {mount paths} uuid = {uuid}""".format_map(info)) # complex values could be parsed too info = udisks_info('/dev/sda') drive_data = info['drive'].replace('ports:\n', 'ports:\n ') print('serial =', parse(drive_data)['serial'])
size = 57.15 GiB mount point = / uuid = b1812c6f-3ad6-40d5-94a6-1575b8ff02f0 serial = N31FNPH8
您可以在python中直接通过dbus使用udisk。
import dbus bus = dbus.SystemBus() ud_manager_obj = bus.get_object("org.freedesktop.UDisks", "/org/freedesktop/UDisks") ud_manager = dbus.Interface(ud_manager_obj, 'org.freedesktop.UDisks') for dev in ud_manager.EnumerateDevices(): device_obj = bus.get_object("org.freedesktop.UDisks", dev) device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE) print device_props.Get('org.freedesktop.UDisks.Device', "DriveVendor") print device_props.Get('org.freedesktop.UDisks.Device', "DeviceMountPaths") print device_props.Get('org.freedesktop.UDisks.Device', "DriveSerial") print device_props.Get('org.freedesktop.UDisks.Device', "PartitionSize")
可用属性的完整列表在这里http://hal.freedesktop.org/docs/udisks/Device.html
如果所有其他操作都失败,则可以分析
udisks
的输出。下面是Python3.2中的一个脚本示例:输出
您可以在python中直接通过dbus使用udisk。
可用属性的完整列表在这里http://hal.freedesktop.org/docs/udisks/Device.html
相关问题 更多 >
编程相关推荐