2010-01-07 10 views
26

Necesito crear un archivo diff usando el estándar UNIX diff con python subproceso módulo. El problema es que debo comparar el archivo y la transmisión sin crear un archivo tempopary. Pensé en usar tubos con nombre a través del método os.mkfifo, pero no alcancé ningún resultado bueno. Por favor, ¿puedes escribir un ejemplo simple sobre cómo resolver esto? Probé este modo:¿Cómo se difiere el flujo de archivos y resultados "sobre la marcha"?

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) 

pero parece que diff no ve el segundo argumento.

Respuesta

36

Puede usar "-" como argumento para diff para significar stdin.

+0

Entonces, puede pasar 'stdin = PIPE' a la' llamada Popen' , y luego 'proc.stdin.write (data)'. – LeafStorm

8

Quizás podría considerar usar el módulo difflib python (he vinculado a un ejemplo aquí) y crear algo que genere e imprima la diferencia directamente en lugar de depender de diff. Los diversos métodos de función dentro de difflib pueden recibir búferes de caracteres que pueden procesarse en diffs de varios tipos.

Alternativamente, se puede construir una tubería de cáscara y la sustitución de proceso de uso como tal

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

Para más detalles, visita http://tldp.org/LDP/abs/html/process-sub.html

Cuestiones relacionadas