Mercurial > cpython-lru_cache-weakref
annotate Tools/scripts/checkpyc.py @ 80661:94de77bd0b4b 2.7
Issue #16194: document imp.load_dynamic problems
when read several extension modules from the same binary object file.
| author | Andrew Svetlov <andrew.svetlov@gmail.com> |
|---|---|
| date | Thu, 29 Nov 2012 19:51:28 +0200 |
| parents | 981fff7363b9 |
| children | 46625e6122e9 |
| rev | line source |
|---|---|
|
4573
73758db2f464
/usr/local/bin/python -> /usr/bin/env python
Guido van Rossum <guido@python.org>
parents:
1506
diff
changeset
|
1 #! /usr/bin/env python |
| 500 | 2 # Check that all ".pyc" files exist and are up-to-date |
| 758 | 3 # Uses module 'os' |
| 500 | 4 |
| 5 import sys | |
| 758 | 6 import os |
| 500 | 7 from stat import ST_MTIME |
|
9294
0de662cecacf
Use the imp module to get the magic word.
Guido van Rossum <guido@python.org>
parents:
4573
diff
changeset
|
8 import imp |
| 500 | 9 |
| 10 def main(): | |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
11 silent = 0 |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
12 verbose = 0 |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
13 if sys.argv[1:]: |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
14 if sys.argv[1] == '-v': |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
15 verbose = 1 |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
16 elif sys.argv[1] == '-s': |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
17 silent = 1 |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
18 MAGIC = imp.get_magic() |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
19 if not silent: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
15930
diff
changeset
|
20 print 'Using MAGIC word', repr(MAGIC) |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
21 for dirname in sys.path: |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
22 try: |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
23 names = os.listdir(dirname) |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
24 except os.error: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
15930
diff
changeset
|
25 print 'Cannot list directory', repr(dirname) |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
26 continue |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
27 if not silent: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
15930
diff
changeset
|
28 print 'Checking ', repr(dirname), '...' |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
29 names.sort() |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
30 for name in names: |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
31 if name[-3:] == '.py': |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
32 name = os.path.join(dirname, name) |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
33 try: |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
34 st = os.stat(name) |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
35 except os.error: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
15930
diff
changeset
|
36 print 'Cannot stat', repr(name) |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
37 continue |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
38 if verbose: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
15930
diff
changeset
|
39 print 'Check', repr(name), '...' |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
40 name_c = name + 'c' |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
41 try: |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
42 f = open(name_c, 'r') |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
43 except IOError: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
15930
diff
changeset
|
44 print 'Cannot open', repr(name_c) |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
45 continue |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
46 magic_str = f.read(4) |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
47 mtime_str = f.read(4) |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
48 f.close() |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
49 if magic_str <> MAGIC: |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
50 print 'Bad MAGIC word in ".pyc" file', |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
15930
diff
changeset
|
51 print repr(name_c) |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
52 continue |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
53 mtime = get_long(mtime_str) |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
54 if mtime == 0 or mtime == -1: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
15930
diff
changeset
|
55 print 'Bad ".pyc" file', repr(name_c) |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
56 elif mtime <> st[ST_MTIME]: |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
57 print 'Out-of-date ".pyc" file', |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
15930
diff
changeset
|
58 print repr(name_c) |
| 500 | 59 |
| 60 def get_long(s): | |
|
15930
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
61 if len(s) <> 4: |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
62 return -1 |
|
14a27acc755a
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
9294
diff
changeset
|
63 return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24) |
| 500 | 64 |
|
33074
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
31515
diff
changeset
|
65 if __name__ == '__main__': |
|
981fff7363b9
[Patch #1005491 ] use __name__ == '__main__' in scripts
Andrew M. Kuchling <amk@amk.ca>
parents:
31515
diff
changeset
|
66 main() |
