gpt4 book ai didi

Python调试,在特定输出处停止

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:55 25 4
gpt4 key购买 nike

我有一个复杂的 python 项目,其中包含许多模块、记录器、扭曲的延迟和其他东西。

在代码的某处,某行被打印到日志中,我想找出位置。通常我只是在代码库中搜索该字符串,但现在该字符串是动态生成的,因此不可搜索。

我想知道是否有任何方法可以在某些 Debug模式下运行 python,并在 sdout 中出现某些模式时告诉它停止,然后在代码中打印它停止的位置?

最佳答案

如何替换 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 ...'

注意 traceback.print_stack使用 sys.stderr。如果您想捕获 sys.stderr,请使用不同的函数(如 traceback.format_stack)。否则它会永远递归;导致 RuntimeError: 超出最大递归深度 ..

关于Python调试,在特定输出处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20703770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com