我正在尝试捕获日志以进行测试,并使用python中的isDead
模块通过正则表达式进行匹配,并通过testfixtures
模块进行日志记录。
这是实际发生的事情的复制品:
logging
但是这段代码会出错并且不匹配。而且我无法将import logging, traceback
from testfixtures import LogCapture, StringComparison
exception = None
try:
raise Exception('test exception')
except Exception as ex:
exception = ex
traceback_str = '\n'.join(traceback.format_exception(type(exception), exception, exception.__traceback__))
with LogCapture() as capture:
logging.info(traceback_str)
capture.check(('root', 'INFO', StringComparison(r'.*test exception.*')))
标记放在regex中作为新行字符考虑re.DOTALL
,因为它会对.
的参数数量产生错误。
目前,作为一种解决方法,我正在使用以下正则表达式:
StringComparison
是否有其他方法可以提供标记来比较捕获的日志,或使用不同的函数检查日志?
答案 0 :(得分:1)
您可以使用内联修饰符版本(?s)
,它等同于将re.DOTALL
/ re.S
标记传递给正则表达式引擎:
r'(?s).*test exception.*'
请参阅re
文档:
<强>
(?aiLmsux)
强>
(集'a'
,'i'
,'L'
,'m'
,'s'
,'u'
,'x'
中的一个或多个字母。 )该组匹配空字符串;字母设置相应的标志:re.A(仅限ASCII匹配),re.I(忽略大小写),re.L(依赖于语言环境),re.M(多行),对于整个正则表达式,re.S(点匹配所有)和re.X(详细)。 (这些标志在Module Contents中描述。)如果您希望将标志包含在正则表达式的一部分中,而不是将标志参数传递给re.compile()
,这将非常有用。功能