2010-01-07 24 views
26

Python altişlemi modülüyle standart UNIX diff komutunu kullanarak bir diff dosyası oluşturmam gerekiyor. Sorun, tempopary dosyası oluşturmadan dosya ve akışı karşılaştırmam gerekmesi. os.mkfifo yöntemiyle adlandırılmış yöneltmeler kullanmayı düşündüm, ancak herhangi bir iyi sonuca ulaşmadı. Lütfen, bu şeylerin nasıl çözüleceğine dair basit bir örnek yazabilir misiniz?Dosya ve çıkış akışı "anında" nasıl?

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) 

ama ikinci argüman görmüyor diff gibi görünüyor: Öyle gibi çalıştı.

cevap

36

stdin anlamına gelen "-" ifadesini diff numaralı bağımsız değişken olarak kullanabilirsiniz.

+0

kontrol Detaylar için, çok

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

gibi bir kabuk boru hattı ve kullanım süreci ikame gerçekleştirebilmesi, sense Popen' çağrısına 'Stdin = PIPE' geçebilir ve sonra 'proc.stdin.write (data)'. – LeafStorm

8

diff'a güvenmek yerine, difflib python modülünü (burada bir örneğe bağladım) kullanmayı ve doğrudan farklılığı oluşturan ve basan bir şey oluşturmayı düşünebilirsiniz. Difflib içindeki çeşitli fonksiyon yöntemleri, çeşitli tiplerde diffs olarak işlenebilen karakter tamponlarını alabilir.

Alternatif olarak, O http://tldp.org/LDP/abs/html/process-sub.html

İlgili konular