【问题标题】:Why has my checksum calculator stopped printing?为什么我的校验和计算器停止打印?
【发布时间】:2014-03-18 19:03:16
【问题描述】:

我正在尝试编写一个小程序来获取某些文件的校验和。使用提到的代码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)。我在这里做错了什么?

【问题讨论】:

  • 尝试将print(sys.argv[0]) 放在最后的if 测试之前;您可能没有得到您认为的系统参数(或者您应该改用sys.argv[1])。
  • 我一直更喜欢使用optparse 作为命令行参数,这只是我的看法。这样您就不必为所有索引而烦恼。

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


【解决方案1】:

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 哈希值。

【讨论】:

  • 天哪,我是个白痴。我想知道为什么 MD5 不匹配。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
相关资源
最近更新 更多