Python: Unterprozess.popen: Lesen Sie jede Zeile der Ausgabe

Ich habe Probleme beim Lesen meiner Teilprozess output per line. Der Teilprozess einfach greps den Inhalt einer Datei gegen eine andere Datei. Die Ausgabe, die sollte sein eine zweispaltige Datei, Drucke auf stdout ganz gut. Aber wenn ich versuche zu Lesen jeder Zeile, liest es jeder char, gefolgt von \n:

#!/usr/bin/python    

import sys
import getopt
import os
import subprocess
from subprocess import Popen, PIPE, STDOUT

inputfile = ''
target = ''

try:
        opts, args = getopt.getopt(sys.argv[1:],"s:t:",['servers=', 'target='])
except getopt.GetoptError:
        print 'getopt failure: exit'
        sys.exit()

for opt, arg in opts:
        if opt in ("-s", "--servers"):
                inputfile = arg
        if opt in ("-t", "--target"):
                boxwin = arg

p1 = subprocess.Popen(["grep -f " + inputfile + " " + target + " | awk '{print $2, $1}'"], stdout=subprocess.PIPE, shell=True)

output, error = p1.communicate()

print output # this prints normally

for line in output:
        print line # this prints each char of output followed by \n???

Erwartete Ausgabe nach dem Lesen von Zeile:

abc 123
def 456
ghi 789

^^ das wird gedruckt, wenn ich nur "print-Ausgabe"

Tatsächlichen Ausgabe, wenn mit for-Schleife zum Lesen jeder Zeile:

a
b
c

1
2
3

d
e
f

...

Irgendwelche Ideen? Danke.

InformationsquelleAutor corneria | 2014-01-29
Schreibe einen Kommentar