File: visitor_poundbang.py

File: visitor_poundbang.py

##########################################################
# 5/2001: change all "#!...python" lines at the top of 
# scripts to either commandline arg or changeToDefault,
# in all files in all dirs at and below the dir where run;
# could skip binary filename extensions too, but works ok;
# this version changes all #! first lines that name python,
# and so is more accurate than a visitor_replace.py run;
##########################################################
"""
Run me like this, to convert all scripts in the book 
examples tree, and redirect/save messages to a file:
C:\...\PP2E>python PyTools\visitor_poundbang.py 
 #!\MyPython21\python > out.txt
"""
import sys, string
from PP2E.PyTools.visitor import FileVisitor # reuse the walker classes
changeToDefault = '#!\Python21\python' # used if no cmdline arg
class PoundBangFixer(FileVisitor):
 def __init__(self, changeTo=changeToDefault):
 FileVisitor.__init__(self)
 self.changeTo = changeTo
 self.clist = []
 def visitfile(self, fullname):
 FileVisitor.visitfile(self, fullname)
 try:
 lines = open(fullname, 'r').readlines()
 if (len(lines) > 0 and
 lines[0][0:2] == '#!' and 
 string.find(lines[0], 'python') != -1
 ):
 lines[0] = self.changeTo + '\n'
 open(fullname, 'w').writelines(lines)
 self.clist.append(fullname)
 except:
 print 'Error translating %s -- skipped' % fullname
 print '...', sys.exc_info()
if __name__ == '__main__':
 if raw_input('Are you sure?') != 'y': sys.exit()
 if len(sys.argv) == 2: changeToDefault = sys.argv[1]
 walker = PoundBangFixer(changeToDefault)
 walker.run()
 print 'Visited %d files and %d dirs,' % (walker.fcount, walker.dcount),
 print 'changed %d files' % len(walker.clist)
 for fname in walker.clist: print fname



AltStyle によって変換されたページ (->オリジナル) /