如何“动态”区分文件和输出流?

时间:2010-01-07 18:07:33

标签: python diff subprocess pipe

我需要使用带有python subprocess 模块的标准UNIX diff 命令创建一个diff文件。问题是我必须比较文件和流而不创建tempopary文件。我想过通过 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没有看到第二个参数。

2 个答案:

答案 0 :(得分:36)

您可以使用“ - ”作为diff的参数来表示stdin

答案 1 :(得分:8)

你也许可以考虑使用difflib python模块(我已经链接到这里的一个例子)并创建一些直接生成和打印diff的东西,而不是依赖diff。 difflib中的各种函数方法可以接收字符缓冲区,可以将其处理成各种类型的差异。

或者,您可以构造一个shell管道并使用类似的进程替换

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

有关详细信息,请查看http://tldp.org/LDP/abs/html/process-sub.html