diff options
author | Jonathan Slenders <jonathan@slenders.be> | 2016-07-11 22:16:10 +0200 |
---|---|---|
committer | Jonathan Slenders <jonathan@slenders.be> | 2016-07-11 22:16:10 +0200 |
commit | 1d240075a0ee074d398c2cdaba714307791985d9 (patch) | |
tree | 452b01081cfb3c0a2b823cde12026620a444dc50 | |
parent | c4f632d807448e390fc369848893c60fe91af57e (diff) |
Also patch stderr in CommandLineInterface.patch_stdout_context.
-rw-r--r-- | prompt_toolkit/interface.py | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/prompt_toolkit/interface.py b/prompt_toolkit/interface.py index fe12fc07..e8fdf98c 100644 --- a/prompt_toolkit/interface.py +++ b/prompt_toolkit/interface.py @@ -948,13 +948,18 @@ class CommandLineInterface(object): """ return _StdoutProxy(self, raw=raw) - def patch_stdout_context(self, raw=False): + def patch_stdout_context(self, raw=False, patch_stdout=True, patch_stderr=True): """ Return a context manager that will replace ``sys.stdout`` with a proxy that makes sure that all printed text will appear above the prompt, and that it doesn't destroy the output from the renderer. + + :param patch_stdout: Replace `sys.stdout`. + :param patch_stderr: Replace `sys.stderr`. """ - return _PatchStdoutContext(self.stdout_proxy(raw=raw)) + return _PatchStdoutContext( + self.stdout_proxy(raw=raw), + patch_stdout=patch_stdout, patch_stderr=patch_stderr) def create_eventloop_callbacks(self): return _InterfaceEventLoopCallbacks(self) @@ -1008,15 +1013,26 @@ class _InterfaceEventLoopCallbacks(EventLoopCallbacks): class _PatchStdoutContext(object): - def __init__(self, new_stdout): + def __init__(self, new_stdout, patch_stdout=True, patch_stderr=True): self.new_stdout = new_stdout + self.patch_stdout = patch_stdout + self.patch_stderr = patch_stderr def __enter__(self): self.original_stdout = sys.stdout - sys.stdout = self.new_stdout + self.original_stderr = sys.stderr + + if self.patch_stdout: + sys.stdout = self.new_stdout + if self.patch_stderr: + sys.stderr = self.new_stdout def __exit__(self, *a, **kw): - sys.stdout = self.original_stdout + if self.patch_stdout: + sys.stdout = self.original_stdout + + if self.patch_stderr: + sys.stderr = self.original_stderr class _StdoutProxy(object): |