我面前有一个巨大的代码库,但找不到将此字符串打印到标准输出的位置:
[{}]
我可以重现它,但搜索相关代码行到目前为止还没有成功。
我猜这是开发人员为了帮助调试而意外添加的。
有任何线索如何找到将该字符串发送到标准输出的匹配代码行吗?
您可以发现相关源代码行引发异常,如果该行像这样发出:
class WrapperOfStdout():
def __init__(self, old_stdout):
self.old_stdout=old_stdout
def write(self, data):
assert not '{}' in data, data
return self.old_stdout.write(data)
def __getattr__(self, name):
return getattr(self.old_stdout, name)
将此包装器添加到您的脚本中,并尽早包装标准输出(在 main 之后不久):
sys.stdout=WrapperOfStdout(sys.stdout)
你会得到这样的异常:
Traceback (most recent call last):
File "/home/u/src/foo-bar/foo_bar/utils/common.py", line 94, in issue_to_tar
meta = issuemeta(request, issue).encode('utf8')
File "/home/u/src/foo/foo/views/issue/view.py", line 198, in issue_meta
div = index_model.view(issue, request)
File "/home/u/src/foo/foo/utils/indexutils.py", line 96, in view
form = form_cls(request, issue, None, prefix=prefix)
File "/home/u/src/foo-x/foo_x/logic/forms.py", line 115, in __init__
print(fake_initial)
File "/home/u/tmp/issue_to_tar.py", line 13, in write
assert not '{}' in data, data
AssertionError: [{}]
现在您可以看到不需要的输出发生在哪里。在本例中,它是
logic/forms.py
第 115 行。