2010-01-07 2 views
26

Ich muss eine Diff-Datei mit Standard UNIX diff Befehl mit Python Subprozess Modul erstellen. Das Problem ist, dass ich Datei und Stream vergleichen muss, ohne temporäre Datei zu erstellen. Ich dachte über Named Pipes über os.mkfifo Methode, aber erreichte kein gutes Ergebnis. Bitte, kannst du ein einfaches Beispiel schreiben, wie man dieses Zeug löst? Ich habe versucht, so wie:Wie kann Datei und Ausgabestream "on-the-fly" verändert werden?

fifo = 'pipe' 
os.mkfifo(fifo) 
op = popen('cat ', fifo) 
print >> open(fifo, 'w'), output 
os.unlink(fifo) 
proc = Popen(['diff', '-u', dumpfile], stdin=op, stdout=PIPE) 

aber es scheint wie diff nicht das zweite Argument sehen.

Antwort

36

Sie können "-" als Argument für diff verwenden, um stdin zu bedeuten.

+0

Dann können Sie 'stdin = PIPE' zum' Popen' Anruf übergeben und dann 'proc.stdin.write (data)'. – LeafStorm

8

Sie könnten vielleicht das Python-Modul in Betracht ziehen (ich habe hier ein Beispiel verlinkt) und etwas erstellen, das das Diff direkt erzeugt und druckt, anstatt sich auf diff zu verlassen. Die verschiedenen Funktionsmethoden innerhalb von difflib können Zeichenpuffer erhalten, die zu diffs verschiedener Typen verarbeitet werden können.

Alternativ können Sie eine Shell-Pipeline und die Verwendung Prozess Substitution konstruieren wie so

diff <(cat pipe) dumpfile # You compare the output of a process and a physical file without explicitly using a temporary file. 

Einzelheiten Besuche http://tldp.org/LDP/abs/html/process-sub.html

Verwandte Themen