如何获取连接到系统的usb驱动器的目录?

2024-06-17 11:56:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要获得为一个简单的usb大容量存储设备浏览器创建的目录的路径(我认为它类似于/media/user/xxxxx)。有人能推荐最好/最简单的方法吗?我正在使用一台Ubuntu 13.10机器,并将在linux设备上使用它。

在python中需要这个。


Tags: 方法路径目录机器ubuntulinux浏览器media
3条回答

这会让你开始:

#!/usr/bin/env python

import os
from glob import glob
from subprocess import check_output, CalledProcessError

def get_usb_devices():
    sdb_devices = map(os.path.realpath, glob('/sys/block/sd*'))
    usb_devices = (dev for dev in sdb_devices
        if 'usb' in dev.split('/')[5])
    return dict((os.path.basename(dev), dev) for dev in usb_devices)

def get_mount_points(devices=None):
    devices = devices or get_usb_devices() # if devices are None: get_usb_devices
    output = check_output(['mount']).splitlines()
    is_usb = lambda path: any(dev in path for dev in devices)
    usb_info = (line for line in output if is_usb(line.split()[0]))
    return [(info.split()[0], info.split()[2]) for info in usb_info]

if __name__ == '__main__':
    print get_mount_points()

它是如何工作的?

首先,我们解析/sys/blocksd*文件(由https://stackoverflow.com/a/3881817/1388392提供)以过滤掉usb设备。 稍后调用mount,并仅为这些设备解析行的输出。

当然,它们可能是一些边缘情况,当这不起作用时,可移植性问题等,或者更好的方法。但要了解更多信息,您应该向经验丰富的linux黑客寻求有关超级用户或服务器故障的帮助。

使用m.wasowski代码,可能会发生意外行为:

return [(info.split()[0], info.split()[2]) for info in usb_info]

如果你的USB设备名中有空格字符,这部分代码可能会产生错误。我用一个叫“USB设备”的设备做了那个动作。

info.split()[2]

当它是media/home/USB设备时,为我返回media/home/USB。

我修改了那个部分,所以它是创建单词“type”,并用以下内容替换了这一行:

#return [(info.split()[0], info.split()[2]) for info in usb_info]

fullInfo = []
for info in usb_info:
    print(info)
    mountURI = info.split()[0]
    usbURI = info.split()[2]
    print(info.split().__sizeof__())
    for x in range(3, info.split().__sizeof__()):
        if info.split()[x].__eq__("type"):
            for m in range(3, x):
                usbURI += " "+info.split()[m]
            break
    fullInfo.append([mountURI, usbURI])
return fullInfo

我不得不修改@m.wasowski的代码,使其在Python3.5.4上工作,如下所示。

def get_mount_points(devices=None):
    devices = devices or get_usb_devices()  # if devices are None: get_usb_devices
    output = check_output(['mount']).splitlines()
    output = [tmp.decode('UTF-8') for tmp in output]

    def is_usb(path):
        return any(dev in path for dev in devices)
    usb_info = (line for line in output if is_usb(line.split()[0]))
    return [(info.split()[0], info.split()[2]) for info in usb_info]

相关问题 更多 >