#!/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()
#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
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]
这会让你开始:
它是如何工作的?
首先,我们解析
/sys/block
的sd*
文件(由https://stackoverflow.com/a/3881817/1388392提供)以过滤掉usb设备。 稍后调用mount
,并仅为这些设备解析行的输出。当然,它们可能是一些边缘情况,当这不起作用时,可移植性问题等,或者更好的方法。但要了解更多信息,您应该向经验丰富的linux黑客寻求有关超级用户或服务器故障的帮助。
使用m.wasowski代码,可能会发生意外行为:
如果你的USB设备名中有空格字符,这部分代码可能会产生错误。我用一个叫“USB设备”的设备做了那个动作。
当它是media/home/USB设备时,为我返回media/home/USB。
我修改了那个部分,所以它是创建单词“type”,并用以下内容替换了这一行:
我不得不修改@m.wasowski的代码,使其在Python3.5.4上工作,如下所示。
相关问题 更多 >
编程相关推荐