从python到robot框架的日志记录不适用于subprocess.call

2024-04-25 05:44:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为Log的函数,它将日志字符串写入robot框架日志文件。 如果我从定义了该函数的.py内调用该函数,它将按预期登录到output.html。但是,如果我从另一个python函数init.py调用此函数,而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,这将对我有很大帮助

提前谢谢


Tags: 函数pyinfologoutputinitdefhtml
1条回答
网友
1楼 · 发布于 2024-04-25 05:44:48

subprocess.call开始的进程没有访问Robot Framework(RF)执行上下文的权限,该上下文是它能够将日志消息写入RF输出文件(output.xml、log.html等)所必需的。在这种情况下,由于进程无法找到上下文,因此robot.api.logger将使用python日志记录模块记录消息,有关详细信息,请参见logger docs

为了从子进程获取到robot日志的输出,可以使用subprocess.run而不是subprocess.call来捕获子进程的输出,并将捕获的输出记录到RF输出。另请参见RFProcess library,了解从RF执行进程的另一种方法

相关问题 更多 >