对简单的校验和比较脚本进行故障排除

时间:2016-03-22 13:33:13

标签: python python-2.x

我创建了一个简单的校验和脚本,用于检查名为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()语句,并且它已经有效,所以我转向你。

1 个答案:

答案 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