1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| from builtins import open as _orig_open
|
| def open(file, mode='r', bufsize=-1):
| if 'w' not in mode:
| return _orig_open(file, mode, bufsize)
| import os
| backup = file + '~'
| try:
| os.unlink(backup)
| except OSError:
| pass
| try:
| os.rename(file, backup)
| except OSError:
| return _orig_open(file, mode, bufsize)
| f = _orig_open(file, mode, bufsize)
| _orig_close = f.close
| def close():
| _orig_close()
| import filecmp
| if filecmp.cmp(backup, file, shallow=False):
| import os
| os.unlink(file)
| os.rename(backup, file)
| f.close = close
| return f
|
|