我只是花了几天的时间来查找python脚本中的一个错误(我不知道,web2py使用了与我期望的目录不同的根目录,导致文件读取失败,因此在命令行运行时,代码很好,但是从网络上运行时,代码失败)。最终找到了罪魁祸首之后,我可以解决无声失败(在这种情况下,在库中为openCV),但是如果存在这种情况,更聪明的侦探会在某种系统日志中看到失败。然后,无论静默失败在哪里,我仍然可以看到它,而不必费心地追踪失败。
那么-是否有某种用于Linux的全局错误日志文件记录诸如文件读取错误之类的信息?是的,我知道有特定于python的错误记录,但问题仍然存在。例如,如果我有一个复杂的项目,其中包含一些python,一些C,一些其他内容,并且某个地方默默地出现故障,那么系统范围的错误日志将为您带来巨大帮助。
该解决方案可能无法满足您的需求,但是无论我想报告一些研究成果,都可能会带您朝正确的方向发展。
首先,在/ var / log下的linux系统中有日志记录。感兴趣的是系统日志和消息文件,它们记录了各种系统事件。但是不会记录文件读取的“错误”,如下所述。
如果打开一个不存在的文件,我们最终将寻找一个失败的开放系统调用(python的open调用this)。但是,在这种低级别上没有例外的概念-如果打开失败,它只会返回一个负数。在C语言中,您可以打开一整天都不存在的文件,而程序仍然返回0错误代码。
这意味着您必须自己做一些工作才能跟踪此问题。我问你一个问题,“如何在低于python异常的水平上跟踪这些错误?” 为此,可以结合使用strace和grep。您为每个进程附加strace,它将记录发生的所有系统调用。
因此,假设我们有一个如下所示的C程序:
#include <stdio.h>
int main()
{
fopen("nothere.txt","r");
}
通过运行strace ./test 2>&1 | grep ENOENT,我们得到:
open("nothere.txt", O_RDONLY) = -1 ENOENT (No such file or directory)
您当然可以在python进程上运行strace以获得相同的结果。
注意事项:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句