Python在分区列表上进行了拆分



我目前正在进行一个项目,该项目使用Ubuntu 20在磁盘上创建所有分区。

def get_partitions():
"""
This function returns a list of partition objects.
"""
partitions = []
for line in open('/proc/partitions'):
if line.startswith('major'):
continue
fields = line.split()
partitions.append(partition(
int(fields[0]),
int(fields[1]),
int(fields[3]),
fields[5]
))
return partitions

但我有一个错误:

Traceback (most recent call last):
File "/home/mathieu-s/Documents/opt/repo/dosm/disk/disk_scanner.py", line 69, in <module>
print(get_partitions())
File "/home/mathieu-s/Documents/opt/repo/dosm/disk/disk_scanner.py", line 62, in get_partitions
int(fields[0]),
IndexError: list index out of range

有人能帮我吗?

错误解释

主要错误

当你在Ubuntu 20.04中从/proc/partitions获得分区数据时,你会得到大约这样的输出:

major minor  #blocks  name
7        0       5956 loop0
7        1          4 loop1
7        2       9240 loop2
7        3       9244 loop3
7        4     151112 loop4
7        5     135924 loop5
7        6     283688 loop6
7        7      63580 loop7
259        0  500107608 nvme0n1
259        1     834560 nvme0n1p1
259        2    8388608 nvme0n1p2
259        3  490883072 nvme0n1p3
7        8     101824 loop8

您可以看到第二行是空的,但在代码中您没有检查这种情况。

第二个错误

线路分区数据:

major minor  #blocks  name
7        0       5956 loop0

获取行的字段后,将第3个字段转换为int,但第3个域是分区的name。将name转换为int将不起作用。

当你从这行得到第5个字段时,它会显示一个错误,因为这个字段在Ubuntu 20.04的文件分区中不存在。


可能的解决方案

修复第一个错误:空行

为了解决主要错误,你可以简单地修改你的if条件:

if line.startswith('major') or line.startswith('n'):

修复第二个问题:字段号

为了解决第二个问题,您可以在append中使用以下内容修改代码:

partitions.append(partition(
int(fields[0]),
int(fields[1]),
int(fields[2]),
fields[3]
))

可能解决方案的所有代码:

def get_partitions():
"""
This function returns a list of partition in the disk.
"""
partitions = []
for line in open('/proc/partitions'):
if line.startswith('major') or line.startswith('n'):
continue
fields = line.split()
partitions.append(partition(
int(fields[0]),
int(fields[1]),
int(fields[2]),
fields[3]
))
return partitions

最新更新