Commit 4693d46f authored by Andrew M. Kuchling's avatar Andrew M. Kuchling

Rename sum5.py to md5sum.py, because sum5.py is more interesting

    as an example program
parent fb9653a6
#! /usr/bin/env python #! /usr/bin/env python
"""Python utility to print MD5 checksums of argument files. """Python utility to print MD5 checksums of argument files.
Works with Python 2.1 and later.
""" """
import sys, md5
BLOCKSIZE = 1024*1024 bufsize = 8096
fnfilter = None
rmode = 'r'
def main(): usage = """
args = sys.argv[1:] usage: sum5 [-b] [-t] [-l] [-s bufsize] [file ...]
if not args: -b : read files in binary mode
sys.stderr.write("usage: %s file ...\n" % sys.argv[0]) -t : read files in text mode (default)
sys.exit(2) -l : print last pathname component only
for file in sys.argv[1:]: -s bufsize: read buffer size (default %d)
f = open(file, "rb") file ... : files to sum; '-' or no files means stdin
sum = md5.new() """ % bufsize
import sys
import os
import getopt
import md5
def sum(*files):
sts = 0
if files and isinstance(files[-1], file):
out, files = files[-1], files[:-1]
else:
out = sys.stdout
if 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 sts
else:
sts = printsum(f, out) or sts
else:
sts = sum(f, out) or sts
return sts
def printsum(filename, out = sys.stdout):
try:
fp = open(filename, rmode)
except IOError, msg:
sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg))
return 1
if fnfilter:
filename = fnfilter(filename)
sts = printsumfp(fp, filename, out)
fp.close()
return sts
def printsumfp(fp, filename, out = sys.stdout):
m = md5.new()
try:
while 1: while 1:
block = f.read(BLOCKSIZE) data = fp.read(bufsize)
if not block: if not data: break
break m.update(data)
sum.update(block) except IOError, msg:
f.close() sys.stderr.write('%s: I/O error: %s\n' % (filename, msg))
print sum.hexdigest(), file return 1
out.write('%s %s\n' % (m.hexdigest(), filename))
if __name__ == "__main__": return 0
main()
def main(args = sys.argv[1:], out = sys.stdout):
global fnfilter, rmode, bufsize
try:
opts, args = getopt.getopt(args, 'blts:')
except getopt.error, msg:
sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))
return 2
for o, a in opts:
if o == '-l':
fnfilter = os.path.basename
if o == '-b':
rmode = 'rb'
if o == '-t':
rmode = 'r'
if 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))
#! /usr/bin/env python
"""Python utility to print MD5 checksums of argument files.
"""
bufsize = 8096
fnfilter = None
rmode = 'r'
usage = """
usage: sum5 [-b] [-t] [-l] [-s bufsize] [file ...]
-b : read files in binary mode
-t : read files in text mode (default)
-l : print last pathname component only
-s bufsize: read buffer size (default %d)
file ... : files to sum; '-' or no files means stdin
""" % bufsize
import sys
import os
import getopt
import md5
def sum(*files):
sts = 0
if files and isinstance(files[-1], file):
out, files = files[-1], files[:-1]
else:
out = sys.stdout
if 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 sts
else:
sts = printsum(f, out) or sts
else:
sts = sum(f, out) or sts
return sts
def printsum(filename, out = sys.stdout):
try:
fp = open(filename, rmode)
except IOError, msg:
sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg))
return 1
if fnfilter:
filename = fnfilter(filename)
sts = printsumfp(fp, filename, out)
fp.close()
return sts
def printsumfp(fp, filename, out = sys.stdout):
m = md5.new()
try:
while 1:
data = fp.read(bufsize)
if not data: break
m.update(data)
except IOError, msg:
sys.stderr.write('%s: I/O error: %s\n' % (filename, msg))
return 1
out.write('%s %s\n' % (m.hexdigest(), filename))
return 0
def main(args = sys.argv[1:], out = sys.stdout):
global fnfilter, rmode, bufsize
try:
opts, args = getopt.getopt(args, 'blts:')
except getopt.error, msg:
sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))
return 2
for o, a in opts:
if o == '-l':
fnfilter = os.path.basename
if o == '-b':
rmode = 'rb'
if o == '-t':
rmode = 'r'
if 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))
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment