Skip to main content
 首页 » 编程设计

python之需要使用子进程模块在 2 个 NamedTemporaryFiles 上运行 diff 命令

2025年05月04日15duanxz

我正在尝试对 2 个命名的临时文件运行 diff,我没有使用 difflib,因为它的输出与 linux diff 不同。 当我运行这段代码时,它没有输出任何东西。我在常规文件上尝试了 diff,效果很好。

#using python 2.6 
temp_stage = tempfile.NamedTemporaryFile(delete = False) 
temp_prod = tempfile.NamedTemporaryFile(delete = False) 
temp_stage.write(stage_notes) 
temp_prod.write(prod_notes) 
 
#this does not work, shows no output, tried both call and popen 
subprocess.Popen(["diff", temp_stage.name, temp_prod.name]) 
 
#subprocess.call(["diff", temp_stage.name, temp_prod.name]) 

请您参考如下方法:

您需要通过调用flush() 强制将文件写出到磁盘;否则您写入文件的数据可能仅存在于缓冲区中。

事实上,如果您这样做,您甚至可以使用 delete = True,前提是没有其他理由保留这些文件。这保留了使用临时文件的好处。

#!/usr/bin/python2 
temp_stage = tempfile.NamedTemporaryFile(delete = True) 
temp_prod = tempfile.NamedTemporaryFile(delete = True) 
temp_stage.write(stage_notes) 
temp_prod.write(prod_notes) 
 
temp_stage.flush() 
temp_prod.flush() 
 
subprocess.Popen(["diff", temp_stage.name, temp_prod.name])