IPython拥有自己的上下文管理器来捕获stdout /
err,但是它不重定向到文件,而是重定向到对象:
from IPython.utils import iowith io.capture_output() as captured: %run my_script.pyprint captured.stdout # prints stdout from your script
并且此功能
%%capture在Cell-
Magic中公开,如Cell
Magics示例笔记本中所示。
这是一个简单的上下文管理器,因此您可以编写自己的版本以重定向到文件:
class redirect_output(object): """context manager for reditrecting stdout/err to files""" def __init__(self, stdout='', stderr=''): self.stdout = stdout self.stderr = stderr def __enter__(self): self.sys_stdout = sys.stdout self.sys_stderr = sys.stderr if self.stdout: sys.stdout = open(self.stdout, 'w') if self.stderr: if self.stderr == self.stdout: sys.stderr = sys.stdout else: sys.stderr = open(self.stderr, 'w') def __exit__(self, exc_type, exc_value, traceback): sys.stdout = self.sys_stdout sys.stderr = self.sys_stderr
您可以通过以下方式调用:
with redirect_output("my_output.txt"): %run my_script.py


