捕获/重定向控制台输出到文件

时间:2018-11-28 23:37:12

标签: python file-io console stdout python-behave

因此,我相信这个问题可以应用于生成python控制台日志的任何python文件。

我试图捕获运行行为测试时生成的输出(所有代码都在python3.x中)。

或更准确地说:我正在尝试将实时生成的控制台输出捕获到文件中,以获取python代码中感兴趣的特定功能。

我的目的是捕获在python代码中达到特定功能后打印在stdout上的控制台日志。

我通常在Ubuntu 18.04上使用behave data_base_scenarios.feature而不加引号。 我想捕获完整的输出,因为它直接输出到控制台中。

在StackOverflow上,搜索了一段时间之后,我尝试了此处描述的一些方法:Capturing stdout within the same process in Python。我还发现了这一点:https://capturer.readthedocs.io/en/latest/

不幸的是,我看不到任何东西被捕获。 我已经小心地设置了行为环境以生成日志。例如,所有这些标志都经过适当地显式设置以生成输出: context.config.stdout_capture = Truecontext.config.log_capture = True。 我对行为环境缺少什么?

行为框架还在“上下文”中提供了一个变量。它的“ context.stdout_capture”。但不幸的是,它什么也没有。

简而言之,行为在控制台上打印

  Captured logging:
    INFO:database.system.status: MyDatabase is online.
    INFO:database.system.status: MyDatabase is now offline.
    INFO:database.system.status: MyDatabase has now initiated.

我只想将上述“捕获的日志记录”控制台输出转储到文件中进行分析。

我该怎么办?请让我知道。

1 个答案:

答案 0 :(得分:0)

所以这取决于您的操作方式,但是如果您使用的是behave_main,则可以执行以下操作:

from behave.__main__ import main as behave_main

args = ['--outfile=/path/to/your/log/directory/output.log']
behave_main(args)

如果您通过命令行运行测试,请使用-o--outfile进行标记并附加日志名称。