python错误:TypeError:' int'对象不可迭代

时间:2016-03-22 18:04:27

标签: python

我需要计算变量" data"中返回值中的行数,但它不接受变量,就像它是这样,这是我做的和错误:

sum_lines =0
data=subprocess.call(["nova list"],shell=True)
for line in data:
        print line
       sum_lines += 1
print sum_lines

错误

  File "./code.py", line 9, in <module>
    for line in data:
TypeError: 'int' object is not iterable

解决方案:我必须使用check_output

data=subprocess.check_output("nova show "+new+"."+projid_new, shell=True)
for line in data.splitlines():
        sum_lines +=1

2 个答案:

答案 0 :(得分:1)

根据文档,subprocess.call会返回错误代码。

  

运行args描述的命令。等待命令完成,然后   返回returncode属性。

尝试迭代返回代码(这是一个整数)会导致'int' object is not iterable异常。

要获得标准输出,您需要使用subprocess.check_output

  

使用参数运行命令并将其输出作为字节字符串返回。

由于输出已经是一个巨大的字符串并且不支持惰性文件类协议,因此要访问单独的行,您需要拆分字符串,例如使用str.splitlines()

  

返回字符串中的行列表,在行边界处断开。   此方法使用通用换行方法来分割线。   除非keepends是,否则换行符不包含在结果列表中   给予和真实。

所以你的代码看起来像是:

sum_lines = 0
data = subprocess.call(["nova list"], shell=True)
for line in data.splitlines():
    print line
    sum_lines += 1
print sum_lines

要简单计算行数,len(data.splitlines())也可以。

答案 1 :(得分:0)

subprocess.call()检查here

  

运行args描述的命令。等待命令完成,然后返回returncode属性。

它返回一个整数而不是可迭代的对象,因此你不能迭代返回值。