home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / TemaCD / webclean / !!!python!!! / BeOpen-Python-2.0.exe / CHECKPYC.PY < prev    next >
Encoding:
Python Source  |  2000-09-28  |  1.5 KB  |  66 lines

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