如何使用udev查找有关插入的视频媒体(例如DVD)的信息

时间:2010-05-18 20:54:06

标签: python udev

我正在尝试将应用程序从使用HAL移植到使用纯udev。它是用python编写的,将使用gudev库,但我很乐意看到任何语言的例子。我可以通过以下方式获取所有连接的视频设备(例如相机)。

import gudev

client = gudev.Client(["video4linux"])
for device in client.get_devices():
    print device.get_sysfs_attr("name"), device.get_device_name()

这打印出如下内容:

USB2.0 UVC WebCam /dev/video0

我也能获得一个块设备列表,但我怎么能:

  1. 判断它是否是CD / DVD驱动器?

  2. 如果驱动器支持可移动媒体,请判断当前是否插入了媒体?

  3. 告诉媒体的名称/标签是什么(例如DVD的FUTURAMAS1)?

  4. 我尝试移植的原始代码位于http://github.com/danielgtaylor/arista/blob/045a4d48ebfda44bc5d0609618ff795604ee134f/arista/inputs.py

    非常感谢任何和所有帮助!


    更新:在下方添加答案。

    import gudev
    
    client = gudev.Client(['block'])
    for device in client.query_by_subsystem("block"):
        if device.has_property("ID_CDROM"):
            print "Found CD/DVD drive at %s" % device.get_device_file()
            if device.has_property("ID_FS_LABEL"):
                print "Found disc: %s" % device.get_property("ID_FS_LABEL")
            elif device.has_property("ID_FS_TYPE"):
                print "Found disc"
            else:
                print "No disc"
    

    上面的代码将输出如下数据:

    Found CD/DVD drive at /dev/sr0
    Found disc: Ubuntu_10.04_i386
    

    感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

查看设备属性:

import gudev

client = gudev.Client(['block'])
for device in client.query_by_subsystem("block"):
    print device
    for device_key in device.get_property_keys():
        print "   property %s: %s" % (device_key, device.get_property(device_key))
    print