我正在尝试在机器人框架中设置一个监控线程来持续监控信号,并在读取某个信号时强行拆除。我有以下代码。
import signal
from datetime import datetime
from robot.api import logger
from robot.libraries.BuiltIn import BuiltIn
import logging
import thread
import os
import sys
import time
def do_error_log_monitoring_new():
def _monitor_log():
time.sleep(5)
# Monitor_Some_Signal
builtin_lib.fatal_error(msg='Force Teardown')
thread_logger = logging.getLogger('root')
thread_logger.info("Started Fault Listener")
builtin_lib = BuiltIn().get_library_instance('BuiltIn', all=True)
thread.start_new_thread(_monitor_log, ())
我有builtin_lib = BuiltIn().get_library_instance('BuiltIn', all=True)
all=True
参数,用于返回所有库名称到实例的字典映射。但是我看到以下错误:
属性错误:' dict'对象没有属性' fatal_error'
此外,删除all=True
参数允许函数通过并触发fatal_error,但是我注意到它不会触发主线程中的拆解,这是我打算做的。关于如何从辅助线程中的fatal_error()
函数触发主线程中的拆解的任何建议?
答案 0 :(得分:0)
您正在将builtin_lib
设置为字典(BuiltIn().get_library_instances(..., all=True)
的结果。正如错误消息所述,此字典没有fatal_error
方法。
改变这个:
builtin_lib.fatal_error(msg='Force Teardown')
......对此:
BuiltIn().fatal_error(msg='Force Teardown')
如果您只需要对BuiltIn库的引用(而不是所有库的字典),则根本不需要调用get_library_instance
,因为BuiltIn()
已经返回了库的实例。