gpt4 book ai didi

python - 在 Python 中确定文件系统的设备

转载 作者:IT王子 更新时间:2023-10-29 00:54:00 26 4
gpt4 key购买 nike

如何使用 Python 确定哪个 Linux 设备/分区包含给定的文件系统?

例如

>>> get_filesystem_device('/')
/dev/sda
>>> get_filesystem_partition('/')
/dev/sda1

最佳答案

您的问题是关于 Linux 的,所以这(或多或少)是特定于 Linux 的。

下面是将主要/次要映射到设备名称的三种变体的代码示例。

  • 解析/proc/partitions。
  • 问哈尔。 Hal 还会跟踪“父”设备,这意味着您可以轻松获取磁盘和分区。
  • 自己检查 sysfs。这是 hal 从中获取信息的地方。

我会说/proc/partitions 是最简单的 - 它只是一个要打开和检查的文件。 hal 为您提供大部分信息,并抽象出许多细节。 sysfs 可能被认为比/proc/partitions 更正确并且不需要 hal 来运行。

对于桌面程序,我会选择 hal。在嵌入式系统上,我会选择 sysfs。


import os

def main():
dev = os.stat("/home/").st_dev
major, minor = os.major(dev), os.minor(dev)

print "/proc/partitions says:", ask_proc_partitions(major, minor)
print "HAL says:", ask_hal(major, minor)
print "/sys says:", ask_sysfs(major, minor)

def _parse_proc_partitions():
res = {}
for line in file("/proc/partitions"):
fields = line.split()
try:
tmaj = int(fields[0])
tmin = int(fields[1])
name = fields[3]
res[(tmaj, tmin)] = name
except:
# just ignore parse errors in header/separator lines
pass

return res

def ask_proc_partitions(major, minor):
d = _parse_proc_partitions()
return d[(major, minor)]

def ask_hal(major, minor):
import dbus

bus = dbus.SystemBus()
halobj = bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
hal = dbus.Interface(halobj, 'org.freedesktop.Hal.Manager')

def getdevprops(p):
bdevi = dbus.Interface(bus.get_object('org.freedesktop.Hal', p),
"org.freedesktop.Hal.Device")
return bdevi.GetAllProperties()

bdevs = hal.FindDeviceByCapability("block")
for bdev in bdevs:
props = getdevprops(bdev)
if (props['block.major'], props['block.minor']) == (major, minor):
parentprops = getdevprops(props['info.parent'])
return (str(props['block.device']),
str(parentprops['block.device']))

def ask_sysfs(major, minor):
from glob import glob
needle = "%d:%d" % (major, minor)

files = glob("/sys/class/block/*/dev")
for f in files:
if file(f).read().strip() == needle:
return os.path.dirname(f)

return None

if __name__ == '__main__':
main()

关于python - 在 Python 中确定文件系统的设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7718411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com