首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印脚本的每一行,因为它只运行于正在运行的顶级脚本?

如何打印脚本的每一行,因为它只运行于正在运行的顶级脚本?
EN

Stack Overflow用户
提问于 2015-08-12 12:04:43
回答 6查看 6.9K关注 0票数 19

python的跟踪模块将允许您在脚本和所有导入模块中运行时,运行脚本打印每一行代码,如下所示:

代码语言:javascript
复制
 python -m trace -trace myscript.py

是否有一种方法可以做同样的事情,但只打印顶级调用,即只在运行时在myscript.py中打印行?

我试图调试一个中止陷阱失败,但我不知道它在哪里死亡。不幸的是,使用完整的--trace需要花费很长时间--脚本通常需要2-3分钟才能运行,并且完整的跟踪已经持续了几个小时。

EN

回答 6

Stack Overflow用户

发布于 2017-04-19 22:46:19

我无意中遇到了这个问题,发现grep是一个快速而肮脏的解决方案:

代码语言:javascript
复制
python -m trace --trace my_script.py | grep my_script.py

不过,我的剧本在有限的时间内运行。对于更复杂的脚本来说,这可能不太好用。

票数 10
EN

Stack Overflow用户

发布于 2016-11-08 19:25:01

也许lptrace可以对你有用。

票数 2
EN

Stack Overflow用户

发布于 2021-06-10 23:13:04

如果只使用一个文件来运行所有的代码,那么当前接受的答案就足够了,但是当使用整个文件项目时是不够的。跟踪多个文件的一种方法是以下列方式手工列出所有文件:

代码语言:javascript
复制
python -m trace --trace src/main.py | grep "main.py\|file2.py"

对于小型项目来说,这可能就足够了,但是对于拥有大量文件的大型项目来说,列出所有必要的文件名可能会变得烦人,而且很容易出错。以这种方式,理想情况下,您需要为您的文件名构造一个正则表达式,并使用find列表来监视所有需要的文件。

按照这个想法,我构建了一个regex,它匹配所有执行而不是的文件名,从较低的破折号开始(以避免在__init__.py文件上匹配),do not在其名称或文件夹名中包含任何大写字母,并具有.py扩展名。若要在src文件夹中列出所有这些文件,请将这些条件匹配,命令如下:

代码语言:javascript
复制
find src/ -type f -regextype sed -regex '\([a-z_]\+/\)\+[a-z][a-z_]\+.py'

现在,为了在grep中使用这些文件,我们只需要在它们之间用一个反斜杠和一个管道打印它们。要打印该结构中的名称,请使用以下命令:

代码语言:javascript
复制
find src/ -type f -regextype sed -regex '\([a-z_]\+/\)\+[a-z][a-z_]\+.py' -printf '%f\\\\|' | awk '{ print substr ($0, 1, length($0)-3)}'

最后,构造命令将所有文件与跟踪匹配:

代码语言:javascript
复制
python -m trace --trace src/main.py | grep "`find src/ -type f -regextype sed -regex '\([a-z_]\+/\)\+[a-z][a-z_]\+.py' -printf '%f\\\\|' | awk '{ print substr ($0, 1, length($0)-3)}'`"

这可以用于匹配项目的特定文件夹中的文件名,并且可以修改regex以包括您希望监视的文件的名称中可能包含的其他重要细节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31964712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档