我是python的新手。这个代码片段获取一个长度为25(devinfoline)的列表,并查找字符串的部分,并将它们分配给dev对象的属性。这看起来很简单。然而,即使列表中有25行,for循环也只会迭代一次。为什么?
我确信我遗漏了一些显而易见的东西,我昨天才开始用python进行编码。
编辑:修复了社区发现的错误,也许这个操作功能对其他人有用。(如果你想知道的话,我的返回dev行在for循环中缩进了,过早地结束了它和函数。这肯定是一个新手错误!)谢谢大家!
第二版:完成了这个项目,任何对完整脚本的链接感兴趣的人都可以在这里找到。它在FreeNAS中发送驱动器温度和SMART测试结果的电子邮件报告。
def SortInfo(device_id):
dev_info_lines = (a command that returns a list of 25 lines about hard drive SMART info)
bEnteredInfoSection = False
i=0
for line in dev_info_lines:
i=i+1
if ( not bEnteredInfoSection ):
TheFirstField = string.split(line," ",2)
if ( "information section" in line.lower() ):
bEnteredInfoSection = True
else:
field = string.split(line,":",1)
if (field[0].lower() == "model family" ):
dev.family = field[1].strip()
elif (field[0].lower() == "device model" ):
dev.model = field[1].strip()
elif (field[0].lower() == "serial number" ):
dev.serial = field[1].strip()
elif (field[0].lower() == "firmware version" ):
dev.firmware_version = field[1].strip()
elif (field[0].lower() == "user capacity" ):
dev.capacity = field[1].strip()
elif (field[0].lower() == "sector sizes" ):
dev.sector_sizes = field[1].strip()
elif (field[0].lower() == "rotation rate" ):
dev.rotation_rate = field[1].strip()
elif (field[0].lower() == "device is" ):
dev.device_is = field[1].strip()
elif (field[0].lower() == "ata version is" ):
dev.ata_version = field[1].strip()
elif (field[0].lower() == "sata version is" ):
dev.sata_version = field[1].strip()
elif (field[0].lower() == "smart support is" ):
temp = string.split(field[1].strip()," ",1)
strTemp = temp[0].strip().lower()
if (strTemp == "available" ):
dev.smart_support_available = True
elif (strTemp == "unavailable" ):
dev.smart_support_available = False
elif (strTemp == "enabled" ):
dev.smart_support_enabled = True
elif (strTemp == "disabled" ):
dev.smart_support_enabled = False
return dev
Python对于使用打印语句进行调试非常友好,尤其是对于文本处理。
您需要:
- 打印dev_info_lines
- 在循环之前打印len(dev_info_lines)(以确保它是您认为的样子)
- 在迭代开始时打印行
为什么它不迭代的答案将立即显现出来,您将有下一个具体问题要问我们:)