我创建了一个简单的校验和脚本,用于检查名为tecu.a2l的文件的校验和,并将其与几个.md5文件进行比较 - 确保在脚本运行时它们都具有完全相同的校验和。
让事情更容易理解:
假设我有tecu.a2l,校验和为1x2x3x。所以md5文件(如果生成正确)应该具有相同的校验和(1x2x3x)。如果其中一个md5文件的校验和与最新的tecu.a2l不同,则会出错。
如果你不太了解我的描述,希望代码可以填补空白。
import hashlib
import dst_creator_constants as CONST
import Tkinter
path_a2l = 'C:<path>\tecu.a2l'
md5 = hashlib.md5()
blocks = 65565
with open(path_a2l, 'rb') as a2l:
readA2L = a2l.read(blocks)
generatedMD5 = md5.hexdigest()
print "stop1"
ihx_md5_files = CONST.PATH_DELIVERABLES_DST
for file in ihx_md5_files:
print "stop2"
if file.endswith('.md5'):
print "stop3"
readMD5 = file.read()
if compare_checksums:
print "Yes"
# Add successful TkInter msg here
else:
print "No"
# Add error msg here
def compare_checksums(generatedMD5, readMD5):
if generatedMD5 == readMD5:
return True
else:
return False
当我运行此脚本时,没有任何反应。没有消息,没有。如果我在python checksum.py
中键入cmd - 它不会返回任何消息。所以我提出了一些print
陈述,看看可能是什么问题。问题是,stop3
从未在命令提示符中显示 - 这意味着该问题与if file.endswith('.md5'):
语句有关。
我不知道为什么它是罪魁祸首,因为我在之前编写的关于此的脚本上使用了这个file.endswith()
语句,并且它已经有效,所以我转向你。
答案 0 :(得分:0)
您没有创建哈希对象。您的文件保留在readA2L
变量中。此外,您的文件可能大于您允许的65565字节缓冲区。尝试更新您的哈希,如下面的功能,让我们知道结果是什么。
import hashlib as h
from os.path import isfile
hasher = h.md5()
block_size = 65536
def get_hexdigest(file_path, hasher, block_size):
if isfile(file_path):
with open(file_path, 'rb') as f:
buf = f.read(block_size)
while len(buf) > 0:
# Update the hasher until the entire file has been read
hasher.update(buf)
buf = f.read(block_size)
digest = hasher.hexdigest()
else:
return None
return digest