@@ -24,38 +24,43 @@ def _detach_wrapper(wrapper):
2424
2525
2626@contextlib .contextmanager
27- def _modify_std ():
28- real_stdin = sys .stdin
29- real_stderr = sys .stderr
30- real_stdout = sys .stdout
27+ def _modify_std (stdin = None , stdout = None , stderr = None ):
28+ if stdin is not None :
29+ real_stdin = sys .stdin
30+ sys .stdin = stdin
31+ if stdout is not None :
32+ real_stdout = sys .stdout
33+ sys .stdout = stdout
34+ if stderr is not None :
35+ real_stderr = sys .stderr
36+ sys .stderr = stderr
3137 try :
3238 yield
3339 finally :
34- sys .stdin = real_stdin
35- sys .stdout = real_stdout
36- sys .stderr = real_stderr
40+ if stdin is not None :
41+ sys .stdin = real_stdin
42+ if stdout is not None :
43+ sys .stdout = real_stdout
44+ if stderr is not None :
45+ sys .stderr = real_stderr
3746
3847
3948def _run (args ):
4049 args = parser .parse_args (args )
4150
4251 output = io .BytesIO ()
43- try :
44- with _modify_std (), args .src .open () as stdin , args .dest .open (
52+ stderr = io . TextIOWrapper ( output , write_through = True )
53+ with args .src .open () as stdin , args .dest .open (
4554 "w"
46- ) as stdout , _detach_wrapper (
47- io .TextIOWrapper (output , write_through = True )
48- ) as stderr :
49- sys .stdin = stdin
50- sys .stdout = stdout
51- sys .stderr = stderr
55+ ) as stdout , _modify_std (stdin = stdin , stdout = stdout , stderr = stderr ):
56+ try :
5257 black .main (
5358 args .black_options + ["-q" , "--stdin-filename" , str (args .src ), "-" ]
5459 )
55- except SystemExit as e :
56- exit_code = e .code
57- else :
58- exit_code = 0
60+ except SystemExit as e :
61+ exit_code = e .code
62+ else :
63+ exit_code = 0
5964
6065 return worker .WorkResult (exit_code = exit_code , output = output .getvalue ())
6166
0 commit comments