#! /usr/bin/env python3"""Python utility to print MD5 checksums of argument files."""bufsize = 8096fnfilter = Nonermode = 'rb'usage = """usage: md5sum.py [-b] [-t] [-l] [-s bufsize] [file ...]-b : read files in binary mode (default)-t : read files in text mode (you almost certainly don't want this!)-l : print last pathname component only-s bufsize: read buffer size (default %d)file ... : files to sum; '-' or no files means stdin""" % bufsizeimport ioimport sysimport osimport getoptfrom hashlib import md5def sum(*files):sts = 0if files and isinstance(files[-1], io.IOBase):out, files = files[-1], files[:-1]else:out = sys.stdoutif len(files) == 1 and not isinstance(files[0], str):files = files[0]for f in files:if isinstance(f, str):if f == '-':sts = printsumfp(sys.stdin, '<stdin>', out) or stselse:sts = printsum(f, out) or stselse:sts = sum(f, out) or stsreturn stsdef printsum(filename, out=sys.stdout):try:fp = open(filename, rmode)except IOError as msg:sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg))return 1if fnfilter:filename = fnfilter(filename)sts = printsumfp(fp, filename, out)fp.close()return stsdef printsumfp(fp, filename, out=sys.stdout):m = md5()try:while 1:data = fp.read(bufsize)if not data:breakif isinstance(data, str):data = data.encode(fp.encoding)m.update(data)except IOError as msg:sys.stderr.write('%s: I/O error: %s\n' % (filename, msg))return 1out.write('%s %s\n' % (m.hexdigest(), filename))return 0def main(args = sys.argv[1:], out=sys.stdout):global fnfilter, rmode, bufsizetry:opts, args = getopt.getopt(args, 'blts:')except getopt.error as msg:sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))return 2for o, a in opts:if o == '-l':fnfilter = os.path.basenameelif o == '-b':rmode = 'rb'elif o == '-t':rmode = 'r'elif o == '-s':bufsize = int(a)if not args:args = ['-']return sum(args, out)if __name__ == '__main__' or __name__ == sys.argv[0]:sys.exit(main(sys.argv[1:], sys.stdout))
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。