在我的 python 脚本中,我使用日志记录模块,其中 INFO 会转到文件和屏幕:
fh_info = logging.FileHandler(info)
fh_info.setLevel(logging.INFO)
fh_info.setFormatter(formatter)
std_out_info = logging.StreamHandler()
std_out_info.setLevel(logging.INFO)
logger.addHandler(fh_info)
logger.addHandler(std_out_info)
但我遇到的问题是,消息在函数完成后到达屏幕。例如,在:
def getToken(self):
msg = ("Initializing token....")
logger.info(msg)
sys.stdout.flush()
try:
jsonreq = ( {"auth": {"KEY:apiKeyCredentials": {
"username": self.username,
"apiKey": self.apikey}}})
auth_headers = {'content-type': 'application/json'}
r = requests.post(self.url, data=json.dumps(jsonreq), headers=auth_headers)
self.jsonresp = json.loads(r.text)
self.token = str(self.jsonresp['access']['token']['id'])
msg = ("done!")
logger.info(msg)
except:
msg = ("Bad name or apikey!")
logger.error(msg)
sys.exit()
函数中的操作完成后,屏幕上将显示消息“Initializing token....”。当身份验证正在进行时,会出现长时间的暂停,没有输出......然后身份验证完成后,我看到“初始化 token ......完成”。
如何使 logger.info(msg) 与脚本流程保持同步并及时输出到屏幕?
最佳答案
您没有使用 sys.stdout
初始化 StreamHandler
,因此它将使用记录的默认值 - sys.stderr
。这就是为什么您的 sys.stdout
刷新没有任何效果 - 您发布的代码没有任何内容导致写入 sys.stdout
!
关于Python 日志模块输出到屏幕延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20199557/