我使用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哈希值,而不是哈希值。你知道吗
调用
digest
以获取作为bytes
对象的哈希,或hexdigest
以获取具有哈希十六进制编码的字符串:相关问题 更多 >
编程相关推荐