我有一个在python中的开源项目的源代码,该项目有一个模块(python)和gui使用模块gui是在qtpython中编写的,现在使用gui并预先形成其中的各种动作是否有任何方式,我可以知道什么是被调用的函数和从哪里像日志和有什么办法,我可以生成源代码的uml图,以便我可以更好地理解它,并贡献到该项目。该项目正在使用的蟒蛇版本是2.7使用开源项目的源代码来学习
回答
正如在评论中提到的,从Python生成UML已在this answer中讨论。 (请记住,Python实际上并不一定是UML可表示的 - 但是如果它真的很好)。
至于在运行时看到控制流,有几种方法可以做到这一点。一种是使用分析和/或调试工具。但让我们看看最简单的方法来记录它,这是你要求的:
你可以在任何时间通过print
“登录”任何东西到控制台。你必须从命令行运行应用程序,而不是启动它的GUI风格(并且在Mac上,这意味着你必须直接运行可执行文件/脚本,而不是任何已经构建出来的.app
包),但是你有日志输出 - 你可以使用你的shell(甚至是Windows cmd
)将它重定向到一个文件以供以后浏览,如果你愿意的话。如果这对您不够好,请参阅内置于标准库中的logging
模块。
如果你想知道从哪里调用函数,你可以在每次函数被调用时记录堆栈跟踪。这有点难看,但它提供了您想要的所有信息,并且您随时可以编写一些代码来解析输出。功能traceback.print_stack正是如此。 (如果想要更多的功能,可以使用其他功能来提取信息,如果需要的话可以格式化,然后以您想要的方式记录。)
您可以通过将此行添加到要跟踪的每个函数:
traceback.print_stack()
另一种方式做,这是写一个猴补丁并将其应用到所有你关心的功能:现在
def tracify(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
traceback.print_stack()
func(*args, **kwargs)
return wrapper
,在主脚本,只是这样做:
InterestingClass.interestingMethod = tracify(InterestingClass.interestingMethod)
现在,每次InterestingClass.interestingMethod被调用时,它都会打印出堆栈跟踪。您不必了解tracify
的工作原理。如果你想改变它对功能的作用,只需将traceback.print_stack()
替换成你想做的任何事情。
那么,如果你想补充班级中的每个“公共”方法呢?
for attr in dir(InterestingClass):
if not attr.startswith('_'):
method = getattr(InterestingClass, attr)
if isinstance(method, instancemethod):
setattr(InterestingClass, tracify(method))
(这是为Python 2 Python 3的改变事物的上涨,使得复杂的情况下更简单,但简单的情形不是很平凡。)
如果要修补的每一个每一个公共方法类,和每个免费的功能,在一个模块?你可以用同样的方法迭代一个模块,并检查每个事物的类型,就像你可以用一个类一样。
您也可以使用inspect模块来为您做很难的事情。但是,如果你只是学习Python,我认为复制和粘贴dir
代码比学习如何使用inspect
简单得多。一旦你对这门语言更加熟悉,回来和inspect
一起玩,找出为什么这一切都奏效。
我不使用Python,但是当您想要实时跟踪程序在做什么时,您使用调试器,并且为Python调试器做一些搜索操作可能会给您带来一些有希望的结果。
- 1. 寻找VB.NET开源项目来学习
- 2. 从开源代码学习
- 3. 良好的开源JS项目学习?
- 4. 开源项目学习asp.net mvc 3
- 5. Java EE开源项目学习?
- 6. 作为c#中的学习源的Asp.net开源项目#
- 7. Android开源项目(AOSP)的学习资源
- 8. 什么是一个很好的开源django项目来学习?
- 9. 学习来源TDD
- 10. 是否有必要学习Java来贡献开源项目?
- 11. 学习资源范围内的项目
- 12. 用于学习重构的良好的开源代码库
- 13. 写得好的开源项目(用于学习)?
- 14. 学习使用开源软件
- 15. 开源的Firefox插件代码,学习最佳编码实践
- 16. Node-RED开源项目项目的调试源代码
- 17. 使学校项目开源的问题?
- 18. 从boost库源代码学习C++
- 19. 学习单声道源代码
- 20. 学习标准库源代码
- 21. 学习Rails源码入门
- 22. 强大的开源Node.js基础项目学习?
- 23. 哪些开源的ASP.Net项目值得学习努力?
- 24. 好的开源代码学习Web编程
- 25. 开始学习Clojure源代码的好地方?
- 26. 使用重复项目的源代码
- 27. 使用git历史学习源代码的工具
- 28. 什么是一些伟大的开源Visual Basic .NET项目来学习?
- 29. Stemming - 代码示例或开源项目?
- 30. 词典:开放源代码项目
@RamNarasimhan:这两个问题都是关于如何找到源代码的。他已经有了源头。他希望在运行时追踪或记录函数调用,或者生成源的UML图。 – abarnert
这是两个不同的问题。从Python生成UML是许多问题的重复,例如,http://stackoverflow.com/questions/260165/whats-the-best-way-to-generate-a-uml-diagram-from-python-source-code 。我建议从你的问题中删除它,然后询问有关日志记录/跟踪程序流程。 – abarnert