gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:55:02 26 4
gpt4 key购买 nike

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

python my_script.py > my_output.txt

当我在 IPython 中运行脚本时如何执行此操作,即像 execfile('my_script.py')

有一个 older page描述一个可以编写来执行此操作的函数,但我相信现在有一种我无法找到的内置方法来执行此操作。

最佳答案

IPython 有自己的 capturing 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 Magics example notebook 中所示.

这是一个简单的上下文管理器,因此您可以编写自己的版本来重定向到文件:

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

关于python - IPython:将 Python 脚本的输出重定向到文件(如 bash >),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com