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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| # Le context manager
class myOpen:
# Constructeur
def __init__(self, name, *args, **kwargs):
print("Création %s" % name)
# Il faut mémoriser les paramètres pour pouvoir les passer à open
self.__name=name
self.__args=args
self.__kwargs=kwargs
# __init__()
# Quand le context manager demande la ressource
def __enter__(self):
print("Ouverture %s" % self.__name)
# On ouvre le fichier (et on le mémorise pour la fermeture)
self.__fp=open(self.__name, *self.__args, **self.__kwargs)
# Ici on retourne le fichier ouvert. Il sera accessible avec "as"
return self.__fp
# __enter__()
# Quand le context manager quitte le bloc
def __exit__(self, tp, e, traceback):
print(
"Fermeture %s - tp=%s, e=%s, traceback=%s" % (
self.__name,
tp, e, traceback,
)
)
# On ferme le fichier, normal
self.__fp.close()
# On efface le fichier puisqu'apparememnt c'est le but final de ce context manager
import os
os.remove(self.__name)
# __exit__()
# class myOpen
# Ecriture fichier d'exemple
with open("toto", "w") as fp: fp.write("Hello World !!!")
# Vérification lecture standard
with open("toto", "r") as fp: print("je lis1: ", fp.read())
# Test du context manager
with myOpen("toto", "r") as fp: print("je lis2: ", fp.read())
# Normalement, ici il doit y avoir un FileNotFoundError puisque le fichier n'existe plus...
with open("toto", "r") as fp: print("je lis3: ", fp.read()) |
Partager