【问题标题】:Sharing external module/function between own classes在自己的类之间共享外部模块/功能
【发布时间】:2014-03-10 15:50:05
【问题描述】:

关于在类之间共享“功能”的问题。
情况:

  • 我自己的所有代码都在一个文件中
  • 我正在使用 python-daemon 来守护我的脚本
  • 使用类(Doorcamdaemon)来启动和运行。
  • 它导入另一个具有循环功能的类(Doorcam)
  • 我将sample script 用于守护程序功能,它展示了如何使用日志记录模块。

日志记录在脚本的主要部分和 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 类中也能工作?

【问题讨论】:

  • Thnx,已更正。简化示例代码时有错别字
  • 请在您的问题中提供更多信息 - 您所说的不起作用是什么意思?错误(提供追溯)?意外输出(提供输入以及预期和实际输出)?
  • 不得不承认上面的例子工作得很好,但我的代码不是......但事实就是如此。我必须搜索我在原始(大到粘贴)代码中出错的地方。我会回来的……

标签: python class logging daemon


【解决方案1】:

尝试移动线

app = Doorcamdaemon()

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

  1. 记录器在 Doorcam 的构造函数尝试使用它的第 18 行中不存在

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

因此,如果尚未定义记录器,则无法创建 Doorcamdaemon。

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

【讨论】:

  • 非常真实!我以为我只声明了一些变量,但其中一个是指记录器系统...谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2015-03-21
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
相关资源
最近更新 更多