【发布时间】: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