【问题标题】:logging from python to robot framework not working for subprocess.call从 python 记录到机器人框架不适用于 subprocess.call
【发布时间】:2021-04-03 00:00:36
【问题描述】:

我有一个名为 Log 的函数,它将日志字符串写入机器人框架日志文件。 如果我从定义的 A.py 中调用此函数,它将按预期登录到 output.html。但是,如果我从另一个 python 函数 init.py 调用此函数,该函数又使用 subprocess.call 从 A.py 本身调用,它不会登录到 output.html。它只是忽略它。 A.py:

def Log( logString,typeOfLog):
        ts = time.time()
        st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
        print(st)
        if typeOfLog=="INFO":
                logger.console(st + '  ' + logString)
                logger.info(logString)
        elif typeOfLog=="DEBUG":
                logger.console(st + '  ' + logString)
                logger.debug(logString)
        elif typeOfLog=="WARN":
                logger.console(st + '  ' + logString)
                logger.warn(logString)
        elif typeOfLog=="ERROR":
                logger.console(st + '  ' + logString)
                logger.error(st + '  ' + logString)
        elif typeOfLog=="":
                logger.console(logString)
                logger.trace(logString)
.
.
.
.
def Test():
        Log("My debug statement in DEPLOY.PY","INFO")----->gets logged to output.html
        ret = subprocess.call("python init.py", shell=True)
        .
        .
        .

init.py 的代码:

from A import Log
from robot.api import logger
def initfunc1():
        Log("Something","INFO")------>this does not get logged to output.html

initfunc1()

如果有人可以解释为什么会发生这种情况以及如何从 init.py 调用 Log 函数并按预期登录到 output.html,这对我有很大帮助。

提前致谢。

【问题讨论】:

  • 什么是logger
  • 我已经从robot.api 导入了它,这样我就可以从python 登录到机器人框架控制台了..
  • A 中的logger 是什么?相同?你在哪里告诉它输出到output.html
  • 是的,它在 A.py 中是一样的。有一个名为 robots.api 的包,它公开了机器人框架的 API。所以我正在使用该包中的记录器模块从我的 python 代码记录到机器人框架。我没有明确提到在任何地方登录 output.html。但是当我运行机器人脚本(反过来调用 A.py 的 Test())时,它会自动创建 output.html,其中包含使用 logger.info 等记录的日志。
  • 我认为问题是当您使用subprocess 时,两个python 实例是完全分开的,这意味着它们中只有一个可以同时写入output.html。但是,我不精通框架,无法帮助您。如果可能,最好不要使用 subprocess。

标签: python logging robotframework


【解决方案1】:

subprocess.call 开始的进程无权访问机器人框架 (RF) 执行上下文,该上下文将日志消息写入 RF 输出文件(output.xml、log.html、 ...)。在这种情况下,由于进程无法找到上下文,robot.api.logger 将使用 python 日志模块记录消息,详情请参阅logger docs

为了从子进程获取输出到机器人日志,您可以使用 subprocess.run 而不是 subprocess.call 来捕获子进程的输出并将捕获的输出记录到 RF 输出。另请参阅 RF Process library,了解从 RF 执行流程的另一种方式。

【讨论】:

    猜你喜欢
    • 2020-08-23
    • 2018-11-23
    • 1970-01-01
    • 2017-11-02
    • 2018-02-03
    • 2019-08-11
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多