学习Python:从管道打印三行连续输出

0 投票
2 回答
927 浏览
提问于 2025-04-16 14:49

我有以下代码:

def cmds(cmd):
    cmd= Popen(cmd, shell=True, stdout=PIPE)
    lines = command.stdout.read().splitlines()

我有一个命令,它输出的内容像这样:

2011/03/30-201
CLIENT 3
Failed
23:17
0.0000

2011/03/31-3
CLIENT 2
Completed
00:47
1.0019

我想每次读取前3行作为一个块,然后再读取接下来的3行作为下一个块,依此类推……我不知道该怎么做。

2 个回答

3

好吧,如果 lines = command.stdout.read().splitlines() 生成了一个像这样的行列表:

['2011/03/30-201', 'CLIENT 3', 'Failed', '23:17', '0.0000', '', '2011/03/31-3', 'CLIENT 2', 'Completed', '00:47', '1.0019']

你可以简单地遍历这个列表,打印每一行,直到遇到一个空行为止,然后重置计数器。虽然这个方法不是特别优雅,但它是最简单直接的做法:

lines = command.stdout.read().splitlines()
i = 0

for line in lines:
  if line != '':
    if i < 3:
      print(line)
  else:
    i = 0

  i += 1
3

未经测试:

def cmds(cmd):
    infile = Popen(cmd, shell=True, stdout=PIPE).stdout
    print infile.readline()
    print infile.readline()
    print infile.readline()
    while True:
        line = infile.readline()
        if not line:
            break
        if line == '\n':
            print infile.readline()
            print infile.readline()
            print infile.readline()

这样做的好处是可以处理非常大的文件,因为它只保存当前正在处理的数据,而不是你命令的全部输出。

撰写回答