m.w*_*ski 13
这应该让你开始:
#!/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()
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?
首先,我们分析/sys/block了sd*文件(礼貌/sf/answers/271727221/)筛选出USB设备.稍后,您mount只为这些设备调用和解析行的输出.
当然,它们可能是一些边缘情况,当这不起作用,可移植性问题等.或更好的方法来做到这一点.但是对于更多信息,您应该寻求有关SuperUser或ServerFault的帮助,以及更有经验的Linux黑客.
我必须修改 @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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5236 次 |
| 最近记录: |