在我的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()
在功能中的操作完成后,消息“正在初始化令牌....”将进入屏幕。在身份验证正在进行而没有输出的情况下进行长时间暂停...然后在身份验证完成后,我看到“正在初始化令牌....已完成”。
如何使logger.info(msg)与脚本流保持同步并及时输出到屏幕?
答案 0 :(得分:2)
您没有使用StreamHandler
初始化sys.stdout
,因此它将使用记录的默认值 - sys.stderr
。这就是为什么你对sys.stdout
的刷新没有任何影响 - 你发布的代码没有引起sys.stdout
的写入!