我有一个控制音频播放器的 python 守护进程。现在我想让这个守护进程监控插入的 USB 磁盘并将它们的内容添加到 mpd 媒体库。
其中一部分是 udisk 客户端,它等待磁盘插入,然后立即挂载它们。
我想以只读方式安装磁盘,因此如果我在没有先卸载或关闭的情况下拔下磁盘,不会有任何数据损坏。
我的最终代码是这样的。
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()