mirror of
https://github.com/python/cpython.git
synced 2024-12-01 11:15:56 +01:00
aaab30e00c
(with one small bugfix in bgen/bgen/scantools.py) This replaces string module functions with string methods for the stuff in the Tools directory. Several uses of string.letters etc. are still remaining.
97 lines
2.4 KiB
Python
Executable File
97 lines
2.4 KiB
Python
Executable File
#! /usr/bin/env python
|
|
|
|
# print md5 checksum for 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 md5
|
|
import regsub
|
|
|
|
StringType = type('')
|
|
FileType = type(sys.stdin)
|
|
|
|
def sum(*files):
|
|
sts = 0
|
|
if files and type(files[-1]) == FileType:
|
|
out, files = files[-1], files[:-1]
|
|
else:
|
|
out = sys.stdout
|
|
if len(files) == 1 and type(files[0]) != StringType:
|
|
files = files[0]
|
|
for f in files:
|
|
if type(f) == StringType:
|
|
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(file, out = sys.stdout):
|
|
try:
|
|
fp = open(file, rmode)
|
|
except IOError, msg:
|
|
sys.stderr.write('%s: Can\'t open: %s\n' % (file, msg))
|
|
return 1
|
|
if fnfilter:
|
|
file = fnfilter(file)
|
|
sts = printsumfp(fp, file, out)
|
|
fp.close()
|
|
return sts
|
|
|
|
def printsumfp(fp, file, 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' % (file, msg))
|
|
return 1
|
|
out.write('%s %s\n' % (hexify(m.digest()), file))
|
|
return 0
|
|
|
|
def hexify(s):
|
|
res = ''
|
|
for c in s:
|
|
res = res + '%02x' % ord(c)
|
|
return res
|
|
|
|
def main(args = sys.argv[1:], out = sys.stdout):
|
|
global fnfilter, rmode, bufsize
|
|
import getopt
|
|
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))
|