【发布时间】:2019-11-15 09:05:30
【问题描述】:
我正在使用 Python 生成 C++ 头文件。它是安全分类的,所以我不能在这里发布。
我根据某些输入生成它,如果这些不改变,则应该生成相同的文件。
因为它是一个几乎无处不在#included 的头文件,触摸它会导致完整的构建。所以,如果没有变化,我不想生成文件。
最简单的方法似乎是在/tmp 中生成文件,然后对现有文件进行 MD5 哈希,看看是否需要更新。
existingFileMd5 = hashlib.md5(open(headerFilePath, 'rb').read())
newFileMd5 = hashlib.md5(open(tempFilePath, 'rb').read())
if newFileMd5 == existingFileMd5:
print('Info: file "' + headerFilePath + '" unchanged, so not updated')
os.remove(tempFilePath)
else:
shutil.move(tempFilePath, headerFilePath)
print('Info: file "' + headerFilePath + '" updated')
但是,当我快速连续运行脚本两次(不更改输入)时,似乎总是认为 MD5 哈希值不同并更新文件,从而减少了构建时间。
文件没有可变部分,除了那些由输入控制的部分。例如,我没有写时间戳。
我让同事关注这两个文件并声明它们是相同的(它们非常小)。 Linux 的meld 文件比较实用程序也将它们声明为相同。
因此,问题似乎出在上面发布的代码上。我做错了什么?
【问题讨论】:
-
不完全是重复的,我想;在这两种情况下正确的方法是相同的,但这里的错误是不同的。