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

2024-10-05 10:46:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用标准UNIXdiff命令和python子流程模块创建一个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看不到第二个参数。


Tags: 模块文件方法命令标准管道os情况
2条回答

您也许可以考虑使用difflibpython模块(我在这里链接到了一个示例),并创建一些直接生成和打印diff的内容,而不是依赖于diff。difflib中的各种函数方法可以接收字符缓冲区,这些字符缓冲区可以被处理成各种类型的diff。

或者,您可以构造一个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

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

相关问题 更多 >

    热门问题