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