我正在做一个相当复杂的项目,一次又一次地我不得不通过查看堆栈跟踪来缩小问题的范围。它们碰巧很长,并且涉及到“我的”代码。标准库代码和第三方库代码。大多数时候真实的的问题是在“我的”代码中,在堆栈跟踪中立即定位它有点困难。在“我的”下我指的是当前工作目录下的代码。
所以我意识到我想要的东西,将着色堆栈跟踪和突出显示行是我的。比较original和highlighted。
我可以写一个python脚本,这样使用:
nosetests | colorize_stack_trace.py
但是我相信使用Linux工具集有一个更快更优雅的方法来完成这件事。
统一采购司:
使用Dennis威廉姆森建议的supercat,中间结果是以下bash函数:
pyst() {
rc=/tmp/spcrc;
echo '#################### ### # # # ########################################' > $rc;
echo ' blk 0 r ^(.*)$' >> $rc;
echo ' mag b 0 r ^\s*File "'`pwd`'/(.*)"' >> $rc;
spc -c $rc;
}
现在我可以做:
nosetests 2>&1 | pyst
不是太优雅,但在某种程度上起作用。还剩下两个问题:
1.在nosetests完成之前,我看不到任何输出,也就是说,我看不到进程。
1.我不得不一遍又一遍地写2〉&1。
统一产品描述2:
问这个问题时,我脑子里想的主要是nosetests
。我刚刚找到了很好的解决方案:rednose鼻子插件。它突出显示本地路径,并做了许多更方便的可读性的事情。
回到原来的问题:我注意到的supercat的问题并不完全与它有关,但它是Unix shell流,刷新,管道,重定向的问题。所以作为问题的答案,我接受一个建议supercat的答案。
9条答案
按热度按时间56lgkhnf1#
实际上,有一个很棒的Python语法高亮库Pygments,它也能够高亮回溯。
所以,你要做的就是:
“pytb”是PythonTracebackLexer的快捷方式,还包括一个专门用于Python 3 Tracebacks的lexer,称为“py 3 tb”。
您可以将输出格式化为各种格式(包括html、latex、svg、几种图像格式等等)。但也有一个终端格式化程序可用(如果您想知道...当然有不同的颜色主题可用!)。
可以使用
-f html
选择另一个格式化程序(在这种情况下,选择HTML格式化程序)。w8f9ii692#
看一下Supercat(spc),它可以突出显示ANSI和HTML,并且可以根据您的特定输出进行配置,它附带了一些C和Python源代码文件的配置文件,例如日志文件、Changelogs、diffs等。
基于Dave Kirby对vim的建议,下面的代码做了类似的事情:
或者
tjjdgumg3#
有一个很好的模块就是为了这个目的:
你只需要通过pip下载并安装它:
将其导入到项目的顶层文件中,例如:
对于每个下属文件,您都会得到这样的回溯(颜色各不相同):
js5cn81o4#
也许你可以使用cgitb模块(简称官方文档here)作为起点(它创建了很好的HTML回溯)。它应该相对简单地做出你需要的修改(例如根据文件路径添加一个颜色标签)。但是当然,只有当你愿意使用浏览器查看追踪时,这才是可行的。
nhaq1z215#
下面是一个使用ipython的例子:
olhwl3o26#
作为对文本进行着色(或格式化)的起点,你可能想看看curses library,也可以看看this how-to,它看起来很有用。
至于覆盖Python内置的所有程序的错误处理......我从来没有尝试过,但我认为这会涉及一些相当低层次的更改。您可以始终将您的代码 Package 在一个巨大的try/except块中,但我假设您不想这样做。我更喜欢编写一个小脚本来做一件事的更统一的方法,并且做得很好:让它接受一个输入,如果它是一个堆栈跟踪,就给它着色。否则,就不加修改地传递文本。使用管道,就像您建议的那样,可能是最好的方法。(在这个例子中,要管道传输stderr,您需要做类似这样的事情,在管道传输之前将stderr与stdout合并:x1月1x)
u2nhd7ah7#
你也可以使用
:cfile
命令用vim打开traceback文件,然后你可以使用:copen
命令打开traceback中高亮显示的ant交互式文件列表,并使用一组相关的vim命令在这些文件之间跳转。jexiocij8#
另一个选择是使用
better_exceptions
。这给你颜色和更详细的堆栈跟踪信息。这比其他库如colored-traceback
更好,因为它仍在开发中。从他们的自述文件中复制信息。pip install better_exceptions
将BETTER_EXCEPTIONS环境变量设置为任意值:
你就可以走了!
结果输出如下
dfuffjeb9#
将文本加载到vim中:
设置vim以突出显示与搜索匹配的所有行
搜索具有“您的”路径的行
瞧-所有与您的路径线将突出显示。
如果你想突出显示下一行,那么你也可以这样做: