关于类之间共享'函数'的问题。
情境:
- 所有我自己的代码是在一个文件
- 我使用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()
到在之后创建和设置日志记录器的行。回溯告诉你:
logger不存在,在第18行Doorcam的构造函数试图使用它
Doorcamdaemon试图在自己的构造函数中在第159行构造一个Doorcam
所以如果logger还没有定义,你就不能创建一个Doorcamdaemon。
您在Doorcam.__init__
中省略的一些内容与此问题有关:)