2024-04-27 03:37:17 发布
网友
我有一个复杂的python项目,有很多模块、记录器、twisted延迟器和其他东西。你知道吗
在代码的某个地方,有一行被打印到日志中,我想知道在哪里。通常我只是在代码库中搜索该字符串,但现在该字符串是动态生成的,因此不可搜索。你知道吗
我想知道是否有任何方法可以在调试模式下运行python,当sdout中出现某种模式时告诉它停止,然后在代码中打印它停止的位置?你知道吗
您可以使用pdb module。 这将使您能够在运行时以交互方式调试代码。 您可以编写一个脚本,在读取日志文件中的那一行之前“一步一步”地运行您的程序。你知道吗
通过设置格式化程序,可以为每个日志记录包括路径名、模块、函数名和行号
formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')
替换sys.stdout怎么样?你知道吗
sys.stdout
例如:
import sys import traceback class StacktraceOnPrint: def __init__(self, orig_stdout, substring): self.orig_stdout = orig_stdout self.substring = substring def write(self, txt): if self.substring in txt: traceback.print_stack() # OR import pdb; pdb.set_trace() self.orig_stdout.write(txt) sys.stdout = StacktraceOnPrint(sys.stdout, 'blah') print 'test ...' print 'Hello blah.' print 'test ...'
注意^{}使用sys.stderr。如果您想捕获sys.stderr,请使用不同的函数(如^{})。否则它将永远重复;导致RuntimeError: maximum recursion depth exceeded。。你知道吗
sys.stderr
RuntimeError: maximum recursion depth exceeded
您可以使用pdb module。 这将使您能够在运行时以交互方式调试代码。 您可以编写一个脚本,在读取日志文件中的那一行之前“一步一步”地运行您的程序。你知道吗
通过设置格式化程序,可以为每个日志记录包括路径名、模块、函数名和行号
替换
sys.stdout
怎么样?你知道吗例如:
注意^{} 使用} )。否则它将永远重复;导致
sys.stderr
。如果您想捕获sys.stderr
,请使用不同的函数(如^{RuntimeError: maximum recursion depth exceeded
。。你知道吗相关问题 更多 >
编程相关推荐