2010-01-07 3 views
26

표준 UNIX diff 명령과 파이썬 하위 프로세스 모듈을 사용하여 diff 파일을 만들어야합니다. 문제는 임시 파일을 만들지 않고 파일과 스트림을 비교해야한다는 것입니다. os.mkfifo 메서드를 통해 명명 된 파이프를 사용하는 방법에 대해 생각했지만 좋은 결과를 얻지 못했습니다. 제발, 당신은이 물건을 해결하는 방법에 대한 간단한 예를 쓸 수 있습니까?"즉시"파일 및 출력 스트림을 서로 비교하는 방법은 무엇입니까?

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) 

을하지만 두 번째 인수가 표시되지 않습니다 diff 것 같아 : 난 너무 좋아 했어요.

답변

36

diff의 인수로 "-"를 사용하면 stdin을 의미 할 수 있습니다.

+0

을 확인, 자세한 내용은 너무

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

같은 쉘 파이프 라인 및 공정을 이용하고 대체를 구성 할 수 있습니다, 당신은'Popen' 호출에'표준 입력 = PIPE'를 전달할 수 있습니다 , 그리고'proc.stdin.write (data)'를 호출한다. – LeafStorm

8

아마도 difflib 파이썬 모듈을 사용해보십시오 (여기에 예제를 링크했습니다). diff을 사용하는 대신 직접 diff를 생성하고 인쇄하는 것을 만들 수 있습니다. difflib 내부의 다양한 함수 메소드는 다양한 유형의 diff로 처리 될 수있는 문자 버퍼를 수신 할 수 있습니다.

다른 방법으로, 그리고 http://tldp.org/LDP/abs/html/process-sub.html