首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python udisks -枚举设备信息

python udisks -枚举设备信息
EN

Stack Overflow用户
提问于 2011-02-21 22:13:33
回答 2查看 6.6K关注 0票数 6

显然,使用udisks二进制文件可以获得大量与附加磁盘相关的信息:

代码语言:javascript
复制
udisks --show-info /dev/sda1

udisks显然只是枚举udev可用的数据。

是否可以使用python获取此信息?例如,如果我只想检索设备序列号、挂载点和大小。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-23 01:59:24

您可以在python中通过dbus直接使用Udisk。

代码语言:javascript
复制
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

票数 14
EN

Stack Overflow用户

发布于 2011-02-22 09:56:15

如果所有其他方法都失败了,您可以解析udisks的输出。以下是Python3.2中的示例脚本:

代码语言:javascript
复制
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'])

输出

代码语言:javascript
复制
size = 57.15 GiB
mount point = /
uuid = b1812c6f-3ad6-40d5-94a6-1575b8ff02f0
serial = N31FNPH8
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5067005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档