annotate Tools/scripts/rgrep.py @ 49955:878d40468c4e legacy-trunk

Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
author Vinay Sajip <vinay_sajip@yahoo.co.uk>
date Wed, 03 Dec 2008 23:22:58 +0000
parents 8a7a2f1f88f0
children 6b18a095c2e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8981
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 #! /usr/bin/env python
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 """Reverse grep.
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 Usage: rgrep [-i] pattern file
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 """
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 import sys
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 import re
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 import getopt
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
11
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 def main():
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 bufsize = 64*1024
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 reflags = 0
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 opts, args = getopt.getopt(sys.argv[1:], "i")
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 for o, a in opts:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 if o == '-i':
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 reflags = reflags | re.IGNORECASE
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 if len(args) < 2:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 usage("not enough arguments")
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 if len(args) > 2:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 usage("exactly one file argument required")
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 pattern, filename = args
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 try:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 prog = re.compile(pattern, reflags)
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 except re.error, msg:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 usage("error in regular expression: %s" % str(msg))
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 try:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 f = open(filename)
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 except IOError, msg:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 usage("can't open %s: %s" % (repr(filename), str(msg)), 1)
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 f.seek(0, 2)
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 pos = f.tell()
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 leftover = None
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 while pos > 0:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 size = min(pos, bufsize)
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 pos = pos - size
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 f.seek(pos)
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 buffer = f.read(size)
25219
8a7a2f1f88f0 Apply diff2.txt from SF patch http://www.python.org/sf/572113
Walter Dörwald <walter@livinglogic.de>
parents: 8981
diff changeset
40 lines = buffer.split("\n")
8981
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 del buffer
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 if leftover is None:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 if not lines[-1]:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 del lines[-1]
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 else:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 lines[-1] = lines[-1] + leftover
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 if pos > 0:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 leftover = lines[0]
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 del lines[0]
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 else:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 leftover = None
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 lines.reverse()
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 for line in lines:
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 if prog.search(line):
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 print line
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
56
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 def usage(msg, code=2):
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 sys.stdout = sys.stderr
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 print msg
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 print __doc__
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 sys.exit(code)
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
62
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 if __name__ == '__main__':
0398051f8ffa New tool: reverse grep (greps from the end). Uses a fairly efficient
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 main()