#! /usr/bin/env python3"""(Ostensibly) fix copyright notices in files.Actually, this script will simply replace a block of text in a file from onestring to another. It will only do this once though, i.e. not globallythroughout the file. It writes a backup file and then does an os.rename()dance for atomicity.Usage: fixnotices.py [options] [filenames]Options:-h / --helpPrint this message and exit--oldnotice=fileUse the notice in the file as the old (to be replaced) string, insteadof the hard coded value in the script.--newnotice=fileUse the notice in the file as the new (replacement) string, instead ofthe hard coded value in the script.--dry-runDon't actually make the changes, but print out the list of files thatwould change. When used with -v, a status will be printed for everyfile.-v / --verbosePrint a message for every file looked at, indicating whether the fileis changed or not."""OLD_NOTICE = """/***********************************************************Copyright (c) 2000, BeOpen.com.Copyright (c) 1995-2000, Corporation for National Research Initiatives.Copyright (c) 1990-1995, Stichting Mathematisch Centrum.All rights reserved.See the file "Misc/COPYRIGHT" for information on usage andredistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.******************************************************************/"""import osimport sysimport getoptNEW_NOTICE = ""DRYRUN = 0VERBOSE = 0def usage(code, msg=''):print(__doc__ % globals())if msg:print(msg)sys.exit(code)def main():global DRYRUN, OLD_NOTICE, NEW_NOTICE, VERBOSEtry:opts, args = getopt.getopt(sys.argv[1:], 'hv',['help', 'oldnotice=', 'newnotice=','dry-run', 'verbose'])except getopt.error as msg:usage(1, msg)for opt, arg in opts:if opt in ('-h', '--help'):usage(0)elif opt in ('-v', '--verbose'):VERBOSE = 1elif opt == '--dry-run':DRYRUN = 1elif opt == '--oldnotice':fp = open(arg)OLD_NOTICE = fp.read()fp.close()elif opt == '--newnotice':fp = open(arg)NEW_NOTICE = fp.read()fp.close()for arg in args:process(arg)def process(file):f = open(file)data = f.read()f.close()i = data.find(OLD_NOTICE)if i < 0:if VERBOSE:print('no change:', file)returnelif DRYRUN or VERBOSE:print(' change:', file)if DRYRUN:# Don't actually change the filereturndata = data[:i] + NEW_NOTICE + data[i+len(OLD_NOTICE):]new = file + ".new"backup = file + ".bak"f = open(new, "w")f.write(data)f.close()os.rename(file, backup)os.rename(new, file)if __name__ == '__main__':main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。