gpt4 book ai didi

python - 解密Python中的大型程序流

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:56 24 4
gpt4 key购买 nike

我正在学习如何设置大型(356 个文件)复杂的 Python 程序。除了手动阅读和解析代码之外,还有什么好的方法可以跟踪程序流程?

我认为有两种方法很有用:

  1. 类似于 Bash 的“set -x”
  2. 显示哪个文件输出每行输出的东西

是否有任何方法可以执行上述操作,或者您认为有用的任何其他方法?

最佳答案

我不知道这实际上是不是一个好主意,但由于我实际上写了一个钩子(Hook)来显示每行输出到 stdout 之前的文件和行,所以我不妨把它给你……

import inspect, sys

class WrapStdout(object):
_stdout = sys.stdout
def write(self, buf):
frame = sys._getframe(1)
try:
f = inspect.getsourcefile(frame)
except TypeError:
f = 'unknown'
l = frame.f_lineno
self._stdout.write('{}:{}:{}'.format(f, l, buf))
def flush(self):
self._stdout.flush()

sys.stdout = WrapStdout()

只需将其保存为一个模块,在您导入它之后,标准输出的每个 block 都将以文件和行号作为前缀。

当然,如果出现以下情况,这将变得非常丑陋:

  • 任何人尝试打印部分行(直接使用 stdout.write,或 print 2.x 中的魔术逗号,或 end='' 在 3.x 中)。
  • 您在 2.x 中混合使用 Unicode 和非 Unicode。
  • 任何源文件都有长路径名。
  • 等等

但是所有棘手的深层 Python 魔法位都在那里;您可以非常轻松地在其基础上进行构建。

关于python - 解密Python中的大型程序流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914919/

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