@@ -24,23 +24,27 @@ def __init__(self, parent):
2424 self .parent = parent
2525
2626 def write (self , data ):
27- self .parent .file .write (data )
27+ if self .parent .file is not None :
28+ self .parent .file .write (data )
2829 self .parent .stdout .write (data )
2930
3031 def flush (self ):
31- self .parent .file .flush ()
32+ if self .parent .file is not None :
33+ self .parent .file .flush ()
3234 self .parent .stdout .flush ()
3335
3436 class Stderr :
3537 def __init__ (self , parent ):
3638 self .parent = parent
3739
3840 def write (self , data ):
39- self .parent .file .write (data )
41+ if self .parent .file is not None :
42+ self .parent .file .write (data )
4043 self .parent .stderr .write (data )
4144
4245 def flush (self ):
43- self .parent .file .flush ()
46+ if self .parent .file is not None :
47+ self .parent .file .flush ()
4448 self .parent .stderr .flush ()
4549
4650 def __init__ (self , log_file : Path ):
@@ -53,7 +57,7 @@ def install(self):
5357 if self .file is not None :
5458 return
5559
56- self .file = self .path .open ('a' )
60+ self .file = self .path .open ('a' , encoding = 'utf-8' , errors = 'replace' )
5761 self .stdout = sys .stdout
5862 self .stderr = sys .stderr
5963 self .stdout .flush ()
@@ -63,13 +67,19 @@ def install(self):
6367 sys .stderr = self .Stderr (self )
6468
6569 def uninstall (self ):
70+ if self .file is None :
71+ raise ValueError ('IORedirector is not installed' )
72+
6673 self .stdout .flush ()
6774 self .stderr .flush ()
6875
6976 sys .stdout = self .stdout
7077 sys .stderr = self .stderr
7178
7279 self .file .close ()
80+ self .file = None
81+ self .stdout = None
82+ self .stderr = None
7383
7484 def __enter__ (self ):
7585 self .install ()
0 commit comments