我目前正在进行一个项目,该项目使用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