这种解决方案可能是不够的高性能满足您的需求,但无论我想报告一些我所做的研究,这些研究都可能会使您朝正确的方向发展。
首先,有在Linux系统下的/ var /日志中记录。感兴趣的是syslog和消息文件,它记录了各种系统事件。但是文件读取“错误”不会被记录下来,如下所述。
在打开不存在的文件的情况下,我们最终会寻找失败的open system call(python's open calls this)。但是在这个低级别上没有例外的概念 - 如果打开失败,它只会返回一个负数。在C中,您可以打开整天不存在的文件,并仍然让程序返回0错误代码。
这意味着你必须做一些工作,自己去跟踪这个问题。我把你的问题说成是,“我怎么能在python的例外以下的级别跟踪这些错误?”为此,您可以使用strace和grep的组合。您为每个进程附加strace,并记录发生的所有系统调用。
所以,想象一下,我们有一个C程序是这样的:
#include
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来达到相同的结果。
事情要警惕:
你必须每个进程的重视这一点。如果你不这样做,我们会回到无声的错误。
Python会产生很多系统调用。您的日志文件可能会变大。
这里有很多IO错误。 ENOENT只是其中之一。
您将需要更复杂的字符串解析来过滤掉您不关心的系统调用。