用Python检查Linux上的USB驱动器?
发布时间:2020-12-20 13:33:36 所属栏目:Python 来源:网络整理
导读:我正在尝试用 Python创建一个系统来检查USB驱动器上是否存在文件,如果没有驱动器,它会等待dbus系统注册新设备然后再次检查. 我检查mtab位了.我检查文件是否存在位.我有dbus位工作,但我现在正在努力的是让它在驱动器注册时突破dbus位,这样我就可以检查mtab然
我正在尝试用
Python创建一个系统来检查USB驱动器上是否存在文件,如果没有驱动器,它会等待dbus系统注册新设备然后再次检查.
我检查mtab位了.我检查文件是否存在位.我有dbus位工作,但我现在正在努力的是让它在驱动器注册时突破dbus位,这样我就可以检查mtab然后检查文件. 我希望这是有道理的. 我会为糟糕的编码风格道歉 – 我只是进入它. 这是我到目前为止: #!/usr/bin/env python import string,time,os,dbus,gobject,sys from dbus.mainloop.glib import DBusGMainLoop def device_added_callback(device): print ("Block device added. Check if it is partitioned") usbdev = "".join(device.split("/")[5:6]) if usbdev.endswith("1") == 1: print ("Block device is partitioned. Waiting for it to be mounted.") # This is where I need to break out of the USB bit so I can check mtab and then check the file exits. def waitforusb(): DBusGMainLoop(set_as_default=True) bus = dbus.SystemBus() proxy = bus.get_object("org.freedesktop.UDisks","/org/freedesktop/UDisks") iface = dbus.Interface(proxy,"org.freedesktop.UDisks") devices = iface.get_dbus_method('EnumerateDevices')() usbdev = iface.connect_to_signal('DeviceAdded',device_added_callback) mainloop = gobject.MainLoop() mainloop.run() return usbdev def checkusbispresent(): f = open("/etc/mtab") lines = f.readlines() f.close() for line in lines: mtpt = "".join(line.split()[1:2]) isthere = mtpt.find("media") if isthere == 1: return mtpt def checkserialfile(mtpt): _serialfile=mtpt+"/serial.lic" if ( not os.path.isfile(_serialfile)): print("Error: serial file not found,please download it now") else: print("Serial file found,attempting validation... ") usbdrive = checkusbispresent() if ( usbdrive is not None ): checkserialfile(usbdrive) else: print ("USB drive is not present. Please add it now.") added = waitforusb() print added 解决方法
得到它了!
我非常怀疑它是最优雅的解决方案,但我会在稍后阶段攻击优雅. 我将mainloop设为全局,然后我可以从device_added_callback中访问它: def waitforusb(): DBusGMainLoop(set_as_default=True) bus = dbus.SystemBus() proxy = bus.get_object("org.freedesktop.UDisks","org.freedesktop.UDisks") devices = iface.get_dbus_method('EnumerateDevices')() iface.connect_to_signal('DeviceAdded',device_added_callback) global mainloop mainloop = gobject.MainLoop() mainloop.run() def device_added_callback(device): usbdev = "".join(device.split("/")[5:6]) if usbdev.endswith("1") == 1: mainloop.quit() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |