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

Linux系统下用Python提取USB挂载路径的问题求助

提取Linux系统中USB设备的挂载路径

需求说明

在Linux系统下,需通过Python代码提取USB设备的挂载路径,仅保留/media/joy/DATA这类目标路径。使用.absolute(file_name)得到的是本地用户目录路径,不符合需求;尝试调用lsblk命令过滤/media/joy路径时出现处理问题。

期望输出:

/media/joy/DATA
/media/joy/DATA2
/media/joy/DATA1

现有代码问题

尝试的代码:

import os
import subprocess
a = subprocess.check_output(['lsblk'])
str_a = str(a)
# 按"\n"分割每一行
str_a_splited = str_a.split("\n")
USB_info = [s for s in str_a_splited if "/media/joy" in s]
print("=  =   =   =   ")
print(USB_info)

核心问题:

  1. subprocess.check_output返回bytes类型,直接用str(a)转换会保留b'前缀和转义字符(如树形符号的\xe2\x94\x9c),导致分割后的内容并非真实行数据。
  2. lsblk默认树形输出包含特殊字符、多行挂载点,增加了过滤提取的复杂度。

解决方案

方法1:修正解码与字符串处理

先将bytes对象正确解码为字符串,再逐行提取挂载路径:

import subprocess

# 执行lsblk并解码为utf-8字符串
output = subprocess.check_output(['lsblk'], encoding='utf-8')
# 分割行并过滤空行
lines = [line.strip() for line in output.split('\n') if line.strip()]

usb_mounts = []
for line in lines:
    if '/media/joy' in line:
        # 分割行内容,取最后一个字段作为挂载路径
        parts = line.split()
        usb_mounts.append(parts[-1])

# 打印结果
for path in usb_mounts:
    print(path)

方法2:让lsblk输出结构化数据(更高效)

利用lsblk参数直接输出目标字段,避免处理复杂树形格式:

import subprocess

# 指定输出MOUNTPOINTS字段,去掉表头,用原始格式输出
output = subprocess.check_output(
    ['lsblk', '--output', 'MOUNTPOINTS', '--noheadings', '--raw'],
    encoding='utf-8'
)

# 筛选包含/media/joy的非空路径
usb_mounts = [
    path.strip() for path in output.split()
    if path.strip() and '/media/joy' in path.strip()
]

for path in usb_mounts:
    print(path)

方法3:通过/proc/mounts提取(更可靠)

读取系统挂载文件,结合USB设备特征精准筛选:

usb_mounts = []
with open('/proc/mounts', 'r') as f:
    for line in f:
        parts = line.split()
        device = parts[0]
        mount_path = parts[1]
        # USB设备通常以/dev/sdb、/dev/sdc等形式命名
        if device.startswith('/dev/sd') and device[5] >= 'b' and '/media/joy' in mount_path:
            usb_mounts.append(mount_path)

for path in usb_mounts:
    print(path)

以上三种方法均可输出期望结果:

/media/joy/DATA
/media/joy/DATA2
/media/joy/DATA1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:30:17