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

如何使用Python 3.x获取类Unix系统中路径对应的设备文件及分区号

没问题!在Python 3.x里,完全可以实现获取指定目录对应设备名称和分区编号的需求,我给你分享两种实用的实现方式:

方法一:使用标准库os模块(无需额外安装)

这个方法依赖Unix类系统的/proc/mounts虚拟文件(实时记录所有挂载信息),结合标准库的os模块就能完成,不需要安装第三方包:

import os

def get_device_info(dir_path):
    # 处理符号链接,获取目录的真实物理路径
    real_dir = os.path.realpath(dir_path)
    
    # 先检查目录是否有效
    if not os.path.isdir(real_dir):
        raise ValueError(f"指定路径不是有效目录:{dir_path}")
    
    # 读取/proc/mounts文件,获取系统所有挂载项
    with open('/proc/mounts', 'r') as f:
        mount_lines = f.readlines()
    
    best_device = None
    longest_mount_point = ""
    
    # 遍历挂载项,找到最匹配的设备(优先最长挂载点,避免嵌套挂载干扰)
    for line in mount_lines:
        parts = line.strip().split()
        if len(parts) < 2:
            continue
        device, mount_point = parts[0], parts[1]
        # 判断目标目录是否属于当前挂载点的子目录,且挂载点长度更长
        if real_dir.startswith(mount_point) and len(mount_point) > len(longest_mount_point):
            longest_mount_point = mount_point
            best_device = device
    
    return best_device

# 测试示例
print(get_device_info('/'))       # 输出示例:/dev/sda1
print(get_device_info('/home'))   # 输出示例:/dev/sda2

关键说明:

  • /proc/mounts是Unix类系统特有的虚拟文件,普通用户即可读取,内容包含设备、挂载点、文件系统类型等信息。
  • os.path.realpath()用来处理符号链接,确保我们拿到的是目录的真实物理路径,避免链接指向的干扰。
  • 优先匹配最长挂载点,是为了应对嵌套挂载的场景(比如/home/user有独立挂载时,能准确返回对应设备而非/home的设备)。
方法二:使用第三方库psutil(更简洁易维护)

psutil是一个跨平台的系统监控库,封装了很多底层系统调用,用它来获取设备信息会更简洁,代码可读性也更强:

步骤1:安装psutil

pip install psutil

步骤2:实现代码

import os
import psutil

def get_device_info(dir_path):
    real_dir = os.path.realpath(dir_path)
    
    if not os.path.isdir(real_dir):
        raise ValueError(f"指定路径不是有效目录:{dir_path}")
    
    # 获取所有物理磁盘挂载信息(all=False过滤掉tmpfs、sysfs这类虚拟文件系统)
    partitions = psutil.disk_partitions(all=False)
    
    best_device = None
    longest_mount_point = ""
    
    for partition in partitions:
        mount_point = partition.mountpoint
        if real_dir.startswith(mount_point) and len(mount_point) > len(longest_mount_point):
            longest_mount_point = mount_point
            best_device = partition.device
    
    return best_device

# 测试示例
print(get_device_info('/'))       # 输出示例:/dev/sda1
print(get_device_info('/home'))   # 输出示例:/dev/sda2

关键说明:

  • psutil.disk_partitions(all=False)会自动过滤掉虚拟文件系统的挂载点,只返回真实的磁盘分区信息,省去了我们自己筛选的麻烦。
  • 这个方法在Linux、macOS等Unix类系统上都能正常工作,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:52