0

我有一个控制音频播放器的 python 守护进程。现在我想让这个守护进程监控插入的 USB 磁盘并将它们的内容添加到 mpd 媒体库。

其中一部分是 udisk 客户端,它等待磁盘插入,然后立即挂载它们。

我想以只读方式安装磁盘,因此如果我在没有先卸载或关闭的情况下拔下磁盘,不会有任何数据损坏。

4

1 回答 1

0

我的最终代码是这样的。

def start_listening():
    import dbus
    from dbus.mainloop.glib import DBusGMainLoop
    DBusGMainLoop(set_as_default=True)

    bus = dbus.SystemBus()

    def cb_insert_disk(*args):
        device = args[0]
        info = args[1]
        if "org.freedesktop.UDisks2.Block" in info:
            if 'org.freedesktop.UDisks2.Partition' in info:
                drive = info['org.freedesktop.UDisks2.Block']['Drive']
                fs = info['org.freedesktop.UDisks2.Partition']['Type']
                print("Mounting", fs, device, "on", drive, "to ...")
                obj = bus.get_object('org.freedesktop.UDisks2', device)
                #mountpoint = obj.Mount(dict(fstype=fs, options="ro"), dbus_interface="org.freedesktop.UDisks2.Filesystem")
                mountpoint = obj.Mount(dict(options="ro"), dbus_interface="org.freedesktop.UDisks2.Filesystem")
                print("Mounted to ", mountpoint)

    bus.add_signal_receiver(cb_insert_disk, 'InterfacesAdded',   'org.freedesktop.DBus.ObjectManager')

    # start the listener loop
    from gi.repository import GObject
    loop = GObject.MainLoop()
    loop.run()

# start a seprate listener thread
thread=threading.Thread(target=start_listening)
thread.daemon=True # enable CTRL+C for aborting
thread.start()

# And our program will continue in this pointless loop
while True:
    time.sleep(1)

只要您以只读方式挂载或使用 ext4 或 NTFS 之类的日志文件系统(不确定),只要拔掉插头,数据完整性就不会出现任何问题。在这种情况下不需要卸载,安装会自动消失。

TODO:python抱怨过时GObject.MainLoop()

于 2021-04-05T11:01:56.503 回答