zu verwenden, habe ich eine Python-Skript Suche nach Protokollen, es kontinuierlich ausgegeben die Protokolle gefunden und ich mag Linux-Rohr verwenden, um die gewünschte Ausgabe zu filtern. Beispiel wie folgt aus:Python wie subprocess Rohr mit Linux-Shell
$ python logsearch.py | grep Timeout
Das Problem ist die Art und WC ist, bis die logsearch.py Oberflächen blockiert, während die logsearch.py wird kontinuierliche Ausgabe des Ergebnis.
Probe logsearch.py:
p = subprocess.Popen("ping google.com", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
for line in p.stdout:
print(line)
UPDATE:
herausgefunden, ändern Sie einfach den stdout in subprocess sys.stdout, Python für Sie das Rohr behandelt.
p = subprocess.Popen("ping -c 5 google.com", shell=True, stdout=**sys.stdout**)
Vielen Dank für alle Hilfe!
'ping -c 5' ein ungeradees Beispiel für ein Skript, das immer läuft! Aber, ja, du kannst Dinge nicht sortieren oder die Anzahl der Dinge zählen, bis du sie alle hast. – tdelaney
@tdelaney Ich habe die Anzahl für Ping entfernt und anstelle der Sortierung verwende ich grep, also nehmen wir an, die Daten sollten in die grep durch Pipe fließen, aber es scheint, läuft für immer ohne etwas drucken. –
Sie erhalten nichts, weil die Ausgabe nicht mit dem Timeout übereinstimmt. Probieren Sie $ python logsearch.py | aus grep -v timeout –