如何在树莓派上用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
相关产品推荐
相关产品推荐

