我需要计算变量" 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
答案 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)