##// END OF EJS Templates
byteify-strings: add --inplace option to write back result
Yuya Nishihara -
r38405:9f42e4a8 default
parent child Browse files
Show More
@@ -10,8 +10,12 b''
10 10 from __future__ import absolute_import
11 11
12 12 import argparse
13 import contextlib
14 import errno
13 15 import io
16 import os
14 17 import sys
18 import tempfile
15 19 import token
16 20 import tokenize
17 21
@@ -162,11 +166,41 b' def process(fin, fout):'
162 166 tokens = replacetokens(list(tokens), fullname='<dummy>')
163 167 fout.write(tokenize.untokenize(tokens))
164 168
169 def tryunlink(fname):
170 try:
171 os.unlink(fname)
172 except OSError as err:
173 if err.errno != errno.ENOENT:
174 raise
175
176 @contextlib.contextmanager
177 def editinplace(fname):
178 n = os.path.basename(fname)
179 d = os.path.dirname(fname)
180 fp = tempfile.NamedTemporaryFile(prefix='.%s-' % n, suffix='~', dir=d,
181 delete=False)
182 try:
183 yield fp
184 fp.close()
185 if os.name == 'nt':
186 tryunlink(fname)
187 os.rename(fp.name, fname)
188 finally:
189 fp.close()
190 tryunlink(fp.name)
191
165 192 def main():
166 193 ap = argparse.ArgumentParser()
194 ap.add_argument('-i', '--inplace', action='store_true', default=False,
195 help='edit files in place')
167 196 ap.add_argument('files', metavar='FILE', nargs='+', help='source file')
168 197 args = ap.parse_args()
169 198 for fname in args.files:
199 if args.inplace:
200 with editinplace(fname) as fout:
201 with open(fname, 'rb') as fin:
202 process(fin, fout)
203 else:
170 204 with open(fname, 'rb') as fin:
171 205 fout = sys.stdout.buffer
172 206 process(fin, fout)
General Comments 0
You need to be logged in to leave comments. Login now