2011-03-31 42 views
0

我有以下代碼:Python入門:從管道打印3 consecutives線

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行下一個塊和更多3 ... 我不知道如何做到這一點。

+0

每行三行之後會發生什麼? – Ramy 2011-03-31 15:39:23

+0

@Ramy只是爲了輸入另一個給我發電子郵件的函數。我的老闆只需要每個塊的前3行。感謝 – 2011-03-31 15:42:18

+0

在設置了行數後,您可以發佈'print lines'的輸出嗎?我只是想看看'.splitlines()'是否保留空行... – Blender 2011-03-31 15:46:49

回答

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() 

這已着手任意巨大的文件,因爲它只能存儲它當前正在使用的數據的優勢而不是你命令的全部輸出。

+1

+1可以理解! – Blender 2011-03-31 15:48:12

+0

我會測試這一個 – 2011-03-31 15:52:41

+0

很好,它工作,很乾淨。謝謝大家! – 2011-03-31 15:59:02

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 
+0

感謝您的回答! – 2011-03-31 15:59:41