学习Python:从管道打印三行连续输出
我有以下代码:
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()
这样做的好处是可以处理非常大的文件,因为它只保存当前正在处理的数据,而不是你命令的全部输出。