[Python库] pyudev

[Python库] pyudev

  1. pyudev​是什么

    pyudev​是libudev​的python版本,而libudev​是linux的设备和硬件管理库。

    pyudev支持libudev的所有功能,可以通过官方提供的接口枚举设备、查找设备属性或者监听设备状态,包括异步监听。

    资料:

    • pyudev github
    • https://pyudev.readthedocs.io/en/latest/api/pyudev.html
  2. 如何枚举设备

    from pyudev import Context
    context = Context() # 创建设备数据库连接对象
    devices_list = context.list_devices() # 列出所有可用的设备,类型是pyudev.Enumerator 可迭代设备的对象
    for device in devices_list:print(device)
    ----------------------------------
    Device('/sys/devices/virtual/tty/tty48')
    Device('/sys/devices/virtual/tty/tty49')
    Device('/sys/devices/virtual/tty/tty5')
    Device('/sys/devices/virtual/tty/tty50')
    ...
    

    Context()​中,默认定义了下面几个可以获取到设备的地址:

    • sys_path​: /sys
    • device_path​: /dev
    • run_path​: /run
  3. 如何查找设备

    官方提供了几种查找设备的方法

    1. from_path(​*context, path*​ )

      根据设备路径查找设备

      from pyudev import Context, Devices
      Device.from_path(context, '/devices/platform')
      ---------------------------------
      Device(u'/sys/devices/platform')
      
    2. from_sys_path(​*context, sys_path*​ )

      根据系统设备路径查找设备

      from pyudev import Context, Devices
      Device.from_sys_path(context, '/sys//devices/platform')
      ---------------------------------
      Device(u'/sys/devices/platform')
      
    3. from_name(​*context, subsystem, sys_name*​ )

      根据设备标识符查找设备

      from pyudev import Context, Devices
      context = Context()
      sda = Devices.from_name(context, 'block', 'sda')
      ------------------------------------------------
      Device(u'/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda')
      
    4. from_device_number(​*context, typ, number*​ )

      根据设备号查找设备

      from pyudev import Context, Devices
      context = Context()
      major, minor = 8, 0
      device = Devices.from_device_number(context, 'block', os.makedev(major, minor))
      -------------------------------
      Device(u'/sys/devices/pci0000:00/0000:00:11.0/host0/target0:0:0/0:0:0:0/block/sda')
      
    5. from_device_file(​*context, filename*​ )

      根据设备文件查找设备

      from pyudev import Context, Devices
      context = Context()
      device = Devices.from_device_file(context, '/dev/sda')
      ------------------------------
      Device(u'/sys/devices/pci0000:00/0000:00:0d.0/host2/target2:0:0/2:0:0:0/block/sda')
      
  4. 如何监听设备

    pyudev​提供了现成的监听接口,可以识别目前市面上所有类型的设备。

    context = Context() 
    monitor = Monitor.from_netlink(context) 
    monitor.filter_by(subsystem='block')
    for device in iter(monitor.poll, None):print('{0.action} on {0.device_path}'.format(device))
    

    上面代码块的意思是,当插入、拔出、挂载、卸载存储设备时,会输出设备的行为以及设备地址。

  5. 获取到设备后获取设备属性

    下面列出一部分属性,具体看文档。想更全面的获取设备属性,不但要去了解pyudev的用法,更要学习udev的底层知识。

    Device 类

    udev 中文手册

    https://blog.csdn.net/u013253075/article/details/122703980

    from pyudev import Context, Device, Devices
    context = Context()
    device = Devices.from_name(context, "block", "sda")
    print(device)
    print(f"device.get('ID_MODEL'): {device.get('ID_MODEL')}")
    print(f"device.context: {device.context}")
    print(f"device.sys_path: {device.sys_path}")
    print(f"device.sys_name: {device.sys_name}")
    print(f"device.sys_number: {device.sys_number}")
    print(f"device.device_path: {device.device_path}")
    print(f"device.device.tags: {list(device.tags)}")
    print(f"device.subsystem: {device.subsystem}")
    print(f"device.driver: {device.driver}")
    print(f"device.device_type: {device.device_type}")
    print(f"device.device_node: {device.device_node}")
    print(f"device.device_number: {device.device_number}")
    print(f"device.device_links: {device.device_links}")
    print(f"device.device_links: {device.device_links}")
    -------------------------------------
    Device('/sys/devices/pci0000:00/0000:00:0d.0/usb2/2-1/2-1:1.0/host0/target0:0:0/0:0:0:0/block/sda')
    device.get('ID_MODEL'): Extreme_55AE
    device.context: <pyudev.core.Context object at 0x7ef3d978c310>
    device.sys_path: /sys/devices/pci0000:00/0000:00:0d.0/usb2/2-1/2-1:1.0/host0/target0:0:0/0:0:0:0/block/sda
    device.sys_name: sda
    device.sys_number: None
    device.device_path: /devices/pci0000:00/0000:00:0d.0/usb2/2-1/2-1:1.0/host0/target0:0:0/0:0:0:0/block/sda
    device.device.tags: ['systemd']
    device.subsystem: block
    device.driver: None
    device.device_type: disk
    device.device_node: /dev/sda
    device.device_number: 2048
    device.device_links: <generator object Device.device_links at 0x7ef3d96ff920>
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TCP协议中104解析】wireshark抓取流量包工具,群殴协议解析基础

Tcp ,104 ,wireshark工具进行解析 IEC104 是用于监控和诊断工业控制网络的一种标准&#xff0c;而 Wireshark则是一款常用的网络协议分析工具&#xff0c;可以用干解析TEC104 报文。本文将介绍如何使用 Wireshark解析 IEC104报文&#xff0c;以及解析过 程中的注意事项。 一、安…

AI图书推荐:用ChatGPT和Python搭建AI应用来变现

《用ChatGPT和Python搭建AI应用来变现》&#xff08;Building AI Applications with ChatGPT API&#xff09;将ChatGPT API与Python结合使用&#xff0c;可以开启构建非凡AI应用的大门。通过利用这些API&#xff0c;你可以专注于应用逻辑和用户体验&#xff0c;而ChatGPT强大的…

[大师C语言(第十四篇)]C语言数据结构技术详解

引言 数据结构是计算机科学中的一个基础概念&#xff0c;它涉及数据组织和访问方法的设计。在C语言中&#xff0c;数据结构的使用可以提高程序的效率和可读性。本文将深入探讨C语言数据结构背后技术&#xff0c;并通过详细的代码案例&#xff0c;展示C语言在数据结构中的应用和…

Axios的使用简单说明

axios 请求方式和参数 axios 可以发送 ajax 请求&#xff0c;不同的方法可以发送不同的请求: axios.get&#xff1a;发送get请求 axios.post&#xff1a;发送post请求 axios.put&#xff1a;发送put请求 axios.delete&#xff1a;发送delete请求 无论哪种方法&#xff0c;第一…

【2】:向量与矩阵

向量 既有大小又有方向的量叫做向量 向量的模 向量的长度 单位向量 (只表示方向不表示长度) 向量的加减运算 向量求和 行向量与列向量的置换 图形学中竖着写 向量的长度计算 点乘&#xff08;计算向量间夹角&#xff09; 点乘满足的运算规律 交换律、结合律、分配…

单例模式(Java实现)

1. 懒汉式线程不安全 public class LazyUnsafeSingleton {private static LazyUnsafeSingleton singleton;private LazyUnsafeSingleton(){}public static LazyUnsafeSingleton getInstance() {if (singleton null) singleton new LazyUnsafeSingleton();return singleton;}…

MouseBoost Pro for Mac v3.4.7 鼠标右键助手 安装教程【支持M芯片】

MouseBoost Pro for Mac v3.4.7 鼠标右键助手 安装教程【支持M芯片】 原文地址&#xff1a;https://blog.csdn.net/weixin_48311847/article/details/139201501

Kibana创建ElasticSearch 用户角色

文章目录 1, ES 权限参考2, 某应用的管理员权限&#xff1a;可以open/close/delete/cat/read/write 索引3, 某应用的读写权限&#xff1a;可以cat/read/write 索引 &#xff08;不能删除索引或数据&#xff09;4, 某应用的只读权限 1, ES 权限参考 https://www.elastic.co/gui…

Notepad++不显示CRLF的方法

View -> Show Symbol -> 去掉勾选 Show All Characters

【教程】PaddleOCR高精度文字识别

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ PaddleOCR/doc/doc_ch/quickstart.md at main PaddlePaddle/PaddleOCR GitHub 安装 pip install paddlepaddle -i https://mirror.baidu.com/pypi/s…

C++是微软发明的吗?为什么会有这么多的编译器?哪个才是官方的

C现在由C标准委员会维护。称作标准C。C标准委员会只是定义C的标准&#xff0c;具体的实现需要各个编译器厂商去实现&#xff0c;如微软实现的C版本为VC。Borland公司实现的是BC。各个编译器基本是遵循C标准的。仅有很小的一部分不同。 C不是微软发明&#xff0c;C是语言 但是有…

新版idea配置git步骤及项目导入

目录 git安装 下载 打开git Bash 配置全局用户名及邮箱 查看已经配置的用户名和邮箱 在IDEA中设置Git 问题解决 项目导入 git安装 下载 进入官网 Git - Downloads 点击所属本机系统&#xff0c;window如下图 选择64位安装 按照默认步骤一直下一步即可 打开git Bash …

HackTheBox-Machines--Beep

Beep测试过程 1 信息收集 nmap端口扫描 gryphonwsdl ~ % nmap -sC -sV 10.129.137.179 Starting Nmap 7.94 ( https://nmap.org ) at 2024-05-28 14:39 CST Nmap scan report for 10.129.229.183 Host is up (0.28s latency). Not shown: 988 closed tcp ports (conn-refused…

Nacos 2.x 系列【12】配置加密插件

文章目录 1. 前言2. 安装插件2.1 编译2.2 客户端2.3 服务端 3. 测试 1. 前言 为保证用户敏感配置数据的安全&#xff0c;Nacos提供了配置加密的新特性。降低了用户使用的风险&#xff0c;也不需要再对配置进行单独的加密处理。 前提条件&#xff1a; 版本:老版本暂时不兼容&…

Leetcode621. 任务调度器

Every day a Leetcode 题目来源&#xff1a;621. 任务调度器 类似题目&#xff1a;1953. 你可以工作的最大周数 解法1&#xff1a;贪心 本质上来说&#xff0c;我们需要构造一个尽量短的&#xff0c;相同元素间隔 > (n1) 的序列。 用一个数组 cnt 统计每个任务的次数。…

【御控工业物联网】 Java JSON结构转换、JSON结构重构、JSON结构互换(17):数组To对象——键值互换属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、核心构件之转换映射三、案例之《JSON数组 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

介绍Django Ninja框架

文章目录 安装快速开始特性详解自动文档生成定义请求和响应模型异步支持中间件支持测试客户端 结论 Django Ninja是一个基于Python的快速API开发框架&#xff0c;它结合了Django和FastAPI的优点&#xff0c;提供了简单易用的方式来构建高性能的Web API。 安装 使用以下命令安…

CSS 介绍及用法,常用属性

一、CSS介绍 A. 简介 CSS全称&#xff1a;全称为层叠样式表&#xff08;Cascading Style Sheets&#xff09;&#xff0c;是一种用于描述网页外观和格式的计算机语言。CSS可以使网页的布局更加丰富和多样化&#xff0c;并且可以将样式信息与网页内容分离&#xff0c;使得网…

如何防止重复提交请求?

下面说的防重操作&#xff0c;如支付功能订单提交业务、表单提交、手机验证码功能。 订单提交为什么需要防重呢&#xff1f;想像一下你在商城购物&#xff0c;你选中商品点击提交订单&#xff0c;如果这时网络延迟没有返回成功提示&#xff0c;你又多点了几次。每点一次都会发送…

SpringBoot入门,idea搭建一个简单SpringBoot项目

初学者搭建一个简单的SpingBoot项目 在IntelliJ IDEA中直接创建一个新的Spring Boot项目非常直观便捷&#xff0c;下面是详细的步骤指南&#xff1a; 第1步&#xff1a;打开IntelliJ IDEA并创建新项目 打开IntelliJ IDEA。选择菜单栏的“File” > “New” > “Project”…