为什么校验和计算器停止打印?

时间:2014-03-18 19:03:16

标签: python python-3.x md5 sha1 checksum

我正在尝试编写一个小程序来获取某些文件的校验和。使用提到over here的代码,我做了这个:

import hashlib
import sys
from functools import partial

def md5sum(filename):
    with open(filename, mode='rb') as f:
        d = hashlib.md5()
        for buf in iter(partial(f.read, 128), b''):
            d.update(buf)
    return d.hexdigest()

print(md5sum(sys.argv[0]))

该代码工作正常。但是,当我尝试添加SHA1支持时:

import hashlib
import sys
from functools import partial

def md5sum(filename):
    with open(filename, mode='rb') as f:
        d = hashlib.md5()
        for buf in iter(partial(f.read, 128), b''):
            d.update(buf)
    return d.hexdigest()

def sha1sum(filename):
    with open(filename, mode='rb') as f:
        d = hashlib.sha1()
        for buf in iter(partial(f.read, 128), b''):
            d.update(buf)
    return d.hexdigest()

if sys.argv[0] == 'md5':
    print(md5sum(sys.argv[1]))
elif sys.argv[0] == 'sha1':
    print(sha1sum(sys.argv[1]))

它停止打印输出(对于MD5和SHA1)。我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

sys.argv[0]是脚本的名称;命令行参数存储在sys.argv[1:]中。您可能想要测试sys.argv[1]

if sys.argv[1] == 'md5':
    print(md5sum(sys.argv[2]))
elif sys.argv[1] == 'sha1':
    print(sha1sum(sys.argv[2]))

请注意,您的原创作品正在使用'版本只计算了脚本本身的MD5哈希值。