我想将一系列dircmp report_full_disclosure((输出到文本文件中。然而,report_full_disclosure((格式是一个文本块,它与file.write(comparison_object.report_full_displosure(不能很好地配合使用,因为file.write((需要一行写入文件。
我尝试过迭代report_full_disclosure((报告,但它也不起作用。以前有其他人遇到过这种特殊的问题吗?是否有不同的方法写入文件?
dircmp.filecmp
的"报告生成"方法不接受文件对象,它们只使用print
语句(或者,在Python 3版本中,使用print()
函数(
您可以创建dircmp.filecmp
的子类,该子类接受方法report
、report_full_closure
和report_partial_closure
的文件参数(如果需要(,在每个print ...
站点编写print >>dest, ...
。在report_*_closure
递归调用的情况下,将dest
参数向下传递给递归调用。
在我看来,缺乏将输出打印到特定文件的能力似乎是一种疏忽,因此,在为这些方法添加了一个可选的文件参数并对其进行了彻底测试后,您可能希望为Python项目做出贡献。
如果您的程序是单线程的,那么在调用report
方法之前,您可以用目标文件临时替换sys.stdout。但这是一种肮脏而脆弱的方法,想象你的程序将永远是单线程的可能是愚蠢的。
这个问题的答案可以在下面提到的另一个stackerflow线程中找到如何重定向';打印';使用python输出到文件?基于上述线程中提供的解决方案对我有效的示例:
>>> import sys
>>> import filecmp
>>> d = dircmp('Documents/dir1','Documents/dir2')
>>> orig_stdout = sys_stdout
>>> orig_stdout = sys.stdout
>>> fo = open('list_of_diff.txt','a+')
>>> sys.stdout = fo
>>> d.report()
>>> sys.stdout = orig_stdout
>>> fo.close()