checkpyc.py revision a635b9a6ffac357f1e296f6c6954b5e6280e6eea
1#! /usr/local/bin/python 2# Check that all ".pyc" files exist and are up-to-date 3# Uses module 'os' 4 5import sys 6import os 7from stat import ST_MTIME 8 9def main(): 10 silent = 0 11 verbose = 0 12 if sys.argv[1:]: 13 if sys.argv[1] == '-v': 14 verbose = 1 15 elif sys.argv[1] == '-s': 16 silent = 1 17 MAGIC = '\0\0\0\0' 18 try: 19 if sys.version[:5] >= '0.9.4': 20 MAGIC = '\224\224\224\0' 21 except: 22 pass 23 if not silent: 24 print 'Using MAGIC word', `MAGIC` 25 for dirname in sys.path: 26 try: 27 names = os.listdir(dirname) 28 except os.error: 29 print 'Cannot list directory', `dirname` 30 continue 31 if not silent: 32 print 'Checking', `dirname`, '...' 33 names.sort() 34 for name in names: 35 if name[-3:] == '.py': 36 name = os.path.join(dirname, name) 37 try: 38 st = os.stat(name) 39 except os.error: 40 print 'Cannot stat', `name` 41 continue 42 if verbose: 43 print 'Check', `name`, '...' 44 name_c = name + 'c' 45 try: 46 f = open(name_c, 'r') 47 except IOError: 48 print 'Cannot open', `name_c` 49 continue 50 magic_str = f.read(4) 51 mtime_str = f.read(4) 52 f.close() 53 if magic_str <> MAGIC: 54 print 'Bad MAGIC word in ".pyc" file', 55 print `name_c` 56 continue 57 mtime = get_long(mtime_str) 58 if mtime == 0 or mtime == -1: 59 print 'Bad ".pyc" file', `name_c` 60 elif mtime <> st[ST_MTIME]: 61 print 'Out-of-date ".pyc" file', 62 print `name_c` 63 64def get_long(s): 65 if len(s) <> 4: 66 return -1 67 return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24) 68 69main() 70