IPython:将 Python 脚本的输出重定向到文件(如 bash >)

新手上路,请多包涵

我有一个要在 IPython 中运行的 Python 脚本。我想将输出重定向(写入)到一个文件,类似于:

 python my_script.py > my_output.txt

当我在 IPython 中运行脚本时,我该怎么做,比如 execfile('my_script.py')

有一个 较旧的页面 描述了可以编写的函数来执行此操作,但我相信现在有一种我找不到的内置方法可以执行此操作。

原文由 wwwilliam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 969
2 个回答

IPython 有自己的上下文管理器来 捕获 stdout/err ,但它不会重定向到文件,而是重定向到一个对象:

 from IPython.utils import io
with io.capture_output() as captured:
    %run my_script.py

print 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

原文由 minrk 发布,翻译遵循 CC BY-SA 3.0 许可协议

要在 IPython 中工作时快速存储变量中包含的文本,请使用 %store>>>

%store VARIABLE >>file.txt (追加)

%store VARIABLE >file.txt (覆盖)

(确保在 >>> 之后没有空格)

原文由 eiffel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题