当前位置: 首页 > 面试题库 >

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

公良天逸
2023-03-14
问题内容

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

python my_script.py > my_output.txt

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

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


问题答案:

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


 类似资料:
  • 问题内容: 我正在AIX 6上工作,在KIX Shell上运行Java命令,并且正在尝试调试类加载问题。我放了-verbose:class来打印加载的类,然后>> / home / user / log.log将控制台放到一个文件中。已创建log.log文件,但其大小为零。文件不包含任何信息,所有详细信息都在一闪而过。 问题答案: 也尝试重定向: 您的Java代码可能正在编写您的命令未重定向的信息

  • 问题内容: 我C编码的一个基本的壳,用于执行基本命令它会执行命令,,等。 我想在我的外壳中执行以下命令。喜欢 ; 这将给我包含过程输出的文件。我找到了一个解决方案,它正在像这样更改shell中的命令。在这种情况下,它将更改为。但是此过程会将输出也提供给文件和终端。如何在终端中停止打印输出。 还是有比使用tee命令更好的解决方案。提前致谢… 问题答案: 这是我用dup2测试的结果 更微妙的一点是在正

  • 我在raspberry pi上得到了一个启动时运行的python脚本(运行良好),我想将输出附加到现有的文本文件中。我在我的/etc/rc.local文件中得到了这段代码(我在cron中也尝试了同样的方法,但由于某种原因,它甚至没有启动脚本)。 不幸的是,无论我尝试什么,日志文件总是空的,除非我直接运行同一个命令并通过按ctrl c而不是ctrl z中止脚本。似乎脚本必须以正确的方式关闭,然后才能

  • 问题内容: 我知道在Linux中,要将输出从屏幕重定向到文件,可以使用或。但是,我不确定为什么部分输出仍会输出到屏幕上而不写入文件。 有没有办法将所有输出重定向到文件? 问题答案: 该部分已写入stderr,用于重定向它。例如: 或者,如果您要在同一文件中: 注意:这在(ba)sh中有效,请检查您的shell语法是否正确

  • 问题内容: 在bash中,调用将在stdout上显示该命令的任何输出。 调用会将该命令的任何输出重定向到指定的文件(在本例中为“输出”)。 有没有一种方法可以将输出重定向到文件 并 在stdout上显示? 问题答案: 您想要的命令名为 : 例如,如果您只关心标准输出: 如果要包括stderr,请执行以下操作: 将通道2(stderr /标准错误)重定向到通道1(stdout /标准输出),以便将两

  • 问题内容: 我想使用python将打印重定向到.txt文件。我有一个“ for”循环,当我要将所有这些输出重定向到一个文件时,它将“打印”每个文件的输出。所以我试着把 在我的脚本的开头。但是,.txt文件中什么也没有。我的脚本是: 所以有什么问题?除了此sys.stdout以外,还有其他方法吗? 我需要我的结果看起来像: 问题答案: 最明显的方法是打印到文件对象: 但是,重定向标准输出对我也有效。