io.py (805B)
1 _open = open 2 3 4 class open: 5 def __init__(self, *args, **kwargs): 6 self.args = args 7 self.kwargs = kwargs 8 self.entered = False 9 self.file = _open(*args, **kwargs) 10 11 @staticmethod 12 def __open_seek(pos, entered, args, kwargs): 13 f = open(*args, **kwargs) 14 if entered: 15 f.__enter__() 16 f.seek(pos) 17 return f 18 19 def __getattr__(self, attr): 20 return getattr(self.file, attr) 21 22 def __iter__(self): 23 return iter(self.file) 24 25 def __enter__(self): 26 self.file.__enter__() 27 self.entered = True 28 return self 29 30 def __exit__(self, ty, exc, tb): 31 self.file.__exit__(ty, exc, tb) 32 33 def __reduce__(self): 34 return (self.__open_seek, (self.tell(), self.entered, self.args, self.kwargs))