annotate Tools/scripts/md5sum.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 62dde5dd475e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59522
fcfe324663a6 convert shebang lines: python -> python3
Benjamin Peterson <benjamin@python.org>
parents: 40587
diff changeset
1 #! /usr/bin/env python3
18218
6991ddafe382 This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
6991ddafe382 This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 """Python utility to print MD5 checksums of argument files.
6991ddafe382 This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 """
6991ddafe382 This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
6
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
7 bufsize = 8096
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
8 fnfilter = None
30184
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
9 rmode = 'rb'
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
10
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
11 usage = """
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
12 usage: sum5 [-b] [-t] [-l] [-s bufsize] [file ...]
30184
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
13 -b : read files in binary mode (default)
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
14 -t : read files in text mode (you almost certainly don't want this!)
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
15 -l : print last pathname component only
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
16 -s bufsize: read buffer size (default %d)
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
17 file ... : files to sum; '-' or no files means stdin
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
18 """ % bufsize
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
19
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
20 import sys
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
21 import os
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
22 import getopt
76106
62dde5dd475e #14490, #14491: add 'sundry'-style import tests for Tools/scripts.
R David Murray <rdmurray@bitdance.com>
parents: 59522
diff changeset
23 from hashlib import md5
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
24
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
25 def sum(*files):
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
26 sts = 0
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
27 if files and isinstance(files[-1], file):
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
28 out, files = files[-1], files[:-1]
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
29 else:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
30 out = sys.stdout
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
31 if len(files) == 1 and not isinstance(files[0], str):
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
32 files = files[0]
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
33 for f in files:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
34 if isinstance(f, str):
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
35 if f == '-':
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
36 sts = printsumfp(sys.stdin, '<stdin>', out) or sts
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
37 else:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
38 sts = printsum(f, out) or sts
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
39 else:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
40 sts = sum(f, out) or sts
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
41 return sts
18218
6991ddafe382 This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
30184
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
43 def printsum(filename, out=sys.stdout):
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
44 try:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
45 fp = open(filename, rmode)
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 30184
diff changeset
46 except IOError as msg:
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
47 sys.stderr.write('%s: Can\'t open: %s\n' % (filename, msg))
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
48 return 1
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
49 if fnfilter:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
50 filename = fnfilter(filename)
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
51 sts = printsumfp(fp, filename, out)
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
52 fp.close()
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
53 return sts
18218
6991ddafe382 This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff changeset
54
30184
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
55 def printsumfp(fp, filename, out=sys.stdout):
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
56 m = md5.new()
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
57 try:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
58 while 1:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
59 data = fp.read(bufsize)
30184
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
60 if not data:
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
61 break
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
62 m.update(data)
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 30184
diff changeset
63 except IOError as msg:
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
64 sys.stderr.write('%s: I/O error: %s\n' % (filename, msg))
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
65 return 1
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
66 out.write('%s %s\n' % (m.hexdigest(), filename))
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
67 return 0
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
68
30184
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
69 def main(args = sys.argv[1:], out=sys.stdout):
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
70 global fnfilter, rmode, bufsize
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
71 try:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
72 opts, args = getopt.getopt(args, 'blts:')
40587
6b18a095c2e7 SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents: 30184
diff changeset
73 except getopt.error as msg:
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
74 sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
75 return 2
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
76 for o, a in opts:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
77 if o == '-l':
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
78 fnfilter = os.path.basename
30184
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
79 elif o == '-b':
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
80 rmode = 'rb'
30184
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
81 elif o == '-t':
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
82 rmode = 'r'
30184
3ea52bc74d17 This started opening files in text mode by default in the 2.3 release,
Tim Peters <tim.peters@gmail.com>
parents: 29104
diff changeset
83 elif o == '-s':
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
84 bufsize = int(a)
18218
6991ddafe382 This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 if not args:
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
86 args = ['-']
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
87 return sum(args, out)
18218
6991ddafe382 This is a trivial command line utility to print MD5 checksums.
Guido van Rossum <guido@python.org>
parents:
diff changeset
88
29104
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
89 if __name__ == '__main__' or __name__ == sys.argv[0]:
a5e99e7e7ff0 Rename sum5.py to md5sum.py, because sum5.py is more interesting
Andrew M. Kuchling <amk@amk.ca>
parents: 23116
diff changeset
90 sys.exit(main(sys.argv[1:], sys.stdout))