考虑以下示例:
P1 = subprocess.Popen(stdout=subprocess.PIPE, stderr=subprocess.PIPE)
P1.stdout.readLines()
在上面的例子中,是否可以将行数计为p1的输出?因为我可以使用p1.stdout.readLines()逐行迭代,
但这不是我想要的,我需要总行数作为输出......这种情况可能吗?
答案 0 :(得分:3)
是的!使用len()
例如:
lines = P1.stdout.readLines()
no_of_lines = len(lines)
或者你可以简单地做:
>>> from subprocess import Popen, PIPE
>>> p = Popen(["ls", "-1", "/usr/local/bin"], stdout=PIPE)
>>> sum(1 for _ in p.stdout)
493
此方法与len()
略有不同,因为它使用生成器表达式并将其调整起来。即:给我p1.stdout 中每一行的1的序列总和。
Python中许多支持迭代的对象也支持len()
函数。
这些对象都实现了__len__
使用的len()
。
这称为Duck Typing,是Python最有用的输入规则之一!