Python中文
首页
教程
问答
标签
搜索
登录
注册
全局名称记录器不是通过类定义的?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我无法将logger作为一个全局名称。。。我在一个普通的脚本中试过,后来又在python cli中试过调试,但显然是我做不到的……<br/> (正如您将注意到的,我试图定义logger global everywhere,但如果没有它,就没有成功)</p> <p>在python cli程序中:</p> <pre><code>import time import datetime import subprocess import re import glob import logging from daemon import runner from lockfile import LockTimeout import RPIO import picamera import atexit #From here, it should be global right? global logger logger = logging.getLogger("DoorcamLog") import DoorcamExample doorcam=DoorcamExample.Doorcam() </code></pre> <p>返回错误:</p> <pre><code>Traceback (most recent call last): File "<stdin>", line 1, in <module> File "DoorcamExample.py", line 28, in __init__ logger.info('Doorcam started capturing') NameError: global name 'logger' is not defined </code></pre> <p>DoorcamExample.py:</p> <pre><code>#!/usr/bin/python import sys import os if os.geteuid() != 0: # This works perfect on a Raspbian system because there's no rootpassword required os.execvp("sudo", ["sudo"] + sys.argv) print('to far!') #This should NEVER be reached, there is something wrong... sys.exit(1) import time import datetime import subprocess import re import glob import logging from daemon import runner from lockfile import LockTimeout import RPIO import picamera import atexit class Doorcam: global logger def __init__(self): logger.info('Doorcam started capturing') self.pollLightFile='/var/tmp/picam-pollLight' atexit.register(self.stopListening) def socket_callback(self, socket, val): vals=val.split() if len(vals) == 0 or len(vals) > 4: number=1 notify=True trigger='Socket' triggernotify='Socket (value %s)'%val elif len(vals) == 1: number=int(vals[0]) notify=True trigger='Socket' triggernotify='Socket (value %s)'%val elif len(vals) == 2: number=int(vals[1]) notify=True trigger=vals[0] triggernotify=vals[0] elif len(vals) == 3: number=int(vals[1]) trigger=vals[0] triggernotify=vals[0] notify=self.boolval(vals[2]) elif len(vals) == 4: number=int(vals[2]) trigger=vals[0] triggernotify=vals[0], [1] notify=self.boolval(vals[3]) socket.send('self.upload(self.shot(filename=self.filename, number=number, trigger=trigger), notify=notify,trigger=triggernotify)') RPIO.close_tcp_client(socket.fileno()) def startListening(self,channel,port=8080, threaded=True): #RPIO.add_interrupt_callback(channel, self.gpio_callback, pull_up_down=RPIO.PUD_DOWN, debounce_timeout_ms=1000) RPIO.add_tcp_callback(port, self.socket_callback) RPIO.wait_for_interrupts(threaded=threaded) def stopListening(self): logger.info('Stop listening') RPIO.stop_waiting_for_interrupts() global logger </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>“Global”变量只是单个模块中的全局变量,因此DoorcamExample.py不能访问在其他模块中定义的记录器。</p> <p>在这种情况下,您不需要全局变量,因为日志模块已经维护了一个真正的全局(即从所有模块可见)日志记录器注册表。因此,如果您在任何模块中执行<code>logging.getLogger("DoorcamLog")</code>,您将获得对同一记录器的引用。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
为什么在使用strptime时会出现未进行转换的数据错误?
6 回答
为什么在使用strptim时会出现这个datetime日期错误
1 回答
为什么在使用StyleFrame时索引列的标题不显示sf.至excel()?
9 回答
为什么在使用sum()函数时会发生“int”对象不可调用的错误?
1 回答
为什么在使用sympy.dsolve时会得到“'list'对象没有属性'func'”?
1 回答
为什么在使用tabla时会得到一个空的数据帧?
5 回答
为什么在使用tensorboard时需要add_graph()的第二个参数?
6 回答
为什么在使用TensorFlow Lite转换YOLOv4时,推断时间/大小没有改进?有什么可能的改进吗?
8 回答
为什么在使用Tensorflow加载训练批时会出现内存泄漏?
8 回答
为什么在使用tensorflow时会收到警告/错误(使用函数API,但未实现错误)
1 回答
为什么在使用tetpyclient发出POST请求时出现403错误?
3 回答
为什么在使用TextBlob时会出现HTTP错误?
1 回答
为什么在使用TFIDF时出现错误“IndexError:list index out of range”pyspark.ml.feature?
9 回答
为什么在使用timedelta格式化之后,我在python中的日期是错误的?
4 回答
为什么在使用timeit或exec函数时,函数中的变量不会在提供的全局命名空间中搜索?
7 回答
为什么在使用tkinter时不能使用复选框?
5 回答
为什么在使用todoistpythonapi时会返回这个奇怪的ID?
3 回答
为什么在使用TQM时,在调整图像大小时,处理时间会有很大的差异?
2 回答
为什么在使用Tweepy下载用户时间线时收到错误消息
10 回答
为什么在使用twitter帐户登录Django应用程序时重定向127.0.0.1:8000?
9 回答