You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在树莓派上用Python检测USB并访问?pyudev挂载路径问题

解决USB设备挂载路径获取问题

你的代码当前遍历的是磁盘设备(DEVTYPE='disk'),也就是整个USB存储盘(比如/dev/sda),但挂载路径(/media/pi/CCCOMA_X64FRE_EN-GB_DV9)属于磁盘上的分区设备(DEVTYPE='partition'),磁盘本身不会有挂载点属性,所以你找不到对应的路径。

解决方案1:直接遍历USB分区设备

修改代码,遍历DEVTYPE='partition'的块设备,这类设备会包含挂载点信息:

import pyudev

context = pyudev.Context()
# 筛选USB总线的分区设备
for device in context.list_devices(subsystem='block', DEVTYPE='partition'):
    if device.get("ID_BUS") == "usb":
        mount_point = device.get("MOUNTPOINT")
        if mount_point:  # 仅处理已挂载的分区
            print(f"设备节点: {device.device_node}")
            print(f"挂载路径: {mount_point}")
            # 这里可以直接使用mount_point访问USB设备内的文件,比如复制数据
            # 示例:shutil.copy("/path/to/local/file", f"{mount_point}/target/")

解决方案2:从磁盘设备关联到子分区

如果你需要先定位到整个USB磁盘,再获取它的分区挂载点,可以通过磁盘设备的children属性遍历子设备:

import pyudev

context = pyudev.Context()
for disk in context.list_devices(subsystem='block', DEVTYPE='disk'):
    if disk.get("ID_BUS") == "usb":
        print(f"USB磁盘: {disk.device_node}")
        # 遍历磁盘下的所有子分区
        for partition in disk.children:
            if partition.device_type == 'partition':
                mount_point = partition.get("MOUNTPOINT")
                if mount_point:
                    print(f"  分区节点: {partition.device_node}")
                    print(f"  挂载路径: {mount_point}")

复制数据的操作示例

拿到挂载路径后,就可以用Python标准库操作文件,比如用shutil复制文件:

import shutil

# 假设已经获取到mount_point
source_file = "/home/pi/test.txt"
target_path = f"{mount_point}/copied_test.txt"
shutil.copy(source_file, target_path)

内容的提问来源于stack exchange,提问作者Diagru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:45:08