只有当diff有东西时输出

时间:2013-12-03 10:46:48

标签: python linux diff

我正在编写一个python脚本来做一些事情然后最后我做了两个文件的差异并将其写入文件。这是为100个文件完成的,我得到100个输出,其中大部分是空的。我只想在diff有一些输出的情况下写输出。我正在做这样的事情

    subprocess.Popen("diff -c -p sample1"+i+".txt sample"+i+".txt > output"+1+".txt",shell=True)

这会创建大量的空输出* .txt文件。我只想在有差异时才输出。有什么选择我不见了。

3 个答案:

答案 0 :(得分:0)

排除外部diff命令的Intead我建议使用difflib之类的库。这将允许您决定何时或何时不输出差异。由于您使用重定向,Popen生成的子shell将始终创建一个文件。

答案 1 :(得分:0)

这可能是一个bash问题,而不是Python问题 - 尽管请参阅Fred Clausen关于如何将其变成Python问题的答案; - )

在SuperUser的this thread中有一些答案 - 总之,有些可能性是:

  • 创建一个检测空输入的bash脚本,并从python中调用
  • 使用ifne命令(当且仅当stdin不为空时才运行以下命令)
  • 使用xargs -r吞下空输入

答案 2 :(得分:0)

Popen 创建一个流程对象 - 您可以通信()(流程对象方法!)。将 stdout = subrpocess.PIPE 添加到Popen调用,并删除输出重定向。 或者您可以使用subprocess.check_output()