我正在使用Python生成C ++头文件。它是安全分类的,所以我不能在这里发布。
我根据某些输入生成该文件,如果这些输入不变,则应生成相同的文件。
由于它是头文件,几乎在所有位置都包含在头文件中,因此触摸它会导致完整构建。因此,如果没有更改,我不想生成该文件。
最简单的方法似乎是先生成文件,/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
文件比较实用程序还宣布它们相同。
因此,问题似乎出在上面发布的代码上。我究竟做错了什么?
您忘了实际要求哈希。您正在比较两个md5-hasher-thingies,而不是哈希值。
调用digest
以将哈希值作为bytes
对象,或hexdigest
获取哈希值的十六进制编码的字符串:
if newFileMd5.digest() == existingFileMd5.digest():
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句