在自己的类之间共享外部模块/函数



关于类之间共享'函数'的问题。
情境:

  • 所有我自己的代码是在一个文件
  • 我使用python-daemon来守护我的脚本
  • 使用一个类(Doorcamdaemon)来启动和运行。
  • 它导入另一个类(Doorcam),它具有循环函数
  • 我正在使用一个示例脚本守护程序函数,它展示了如何使用日志模块。

日志记录从脚本的主要部分和Doorcamdaemon类中工作,但不在Doorcam类中。

class Doorcamdaemon():
    def __init__(self):
        #skipping some content, not related to this issue
        self.Doorcam=Doorcam()
    def run(self):
        self.Doorcam.startListening() #looping function
class Doorcam
    def __init__(self):
        #skipping somecontent, not related to this issue
    def startListening(self):
        while True:
            logger.info('Hello')
app = Doorcamdaemon()
logger = logging.getLogger("DoorcamLog")
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler = logging.FileHandler("/var/log/doorcam.log")
handler.setFormatter(formatter)
logger.addHandler(handler)
daemon_runner = runner.DaemonRunner(app)
daemon_runner.daemon_context.files_preserve=[handler.stream]
daemon_runner.do_action()

返回的错误是:

$ ./Doorcam.py start
Traceback (most recent call last):
  File "./Doorcam.py", line 211, in <module>
    app = Doorcamdaemon()
  File "./Doorcam.py", line 159, in __init__
    self.doorcam=Doorcam()
  File "./Doorcam.py", line 18, in __init__
    logger.info('Doorcam started capturing')
NameError: global name 'logger' is not defined
所以我明显的问题是:我怎样才能使它在Doorcam类中工作?

尝试移动行

app = Doorcamdaemon()

之后创建和设置日志记录器的行。回溯告诉你:

  1. logger不存在,在第18行Doorcam的构造函数试图使用它

  2. Doorcamdaemon试图在自己的构造函数中在第159行构造一个Doorcam

所以如果logger还没有定义,你就不能创建一个Doorcamdaemon。

您在Doorcam.__init__ 中省略的一些内容与此问题有关:)

相关内容

  • 没有找到相关文章

最新更新