加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

用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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读