从subprocess.popen获取总行数

时间:2014-05-14 06:39:05

标签: python python-2.7

考虑以下示例:

P1 = subprocess.Popen(stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    P1.stdout.readLines()

在上面的例子中,是否可以将行数计为p1的输出?因为我可以使用p1.stdout.readLines()逐行迭代,

但这不是我想要的,我需要总行数作为输出......这种情况可能吗?

1 个答案:

答案 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()函数。

  • 列表
  • 字典
  • 设置
  • 的unicode / STR /字节

这些对象都实现了__len__使用的len()

这称为Duck Typing,是Python最有用的输入规则之一!