我试图写一个小程序来获取一些文件的校验和。使用这里提到的代码,我这样做:
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)。我哪里做错了?
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哈希值。