Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python linux是否有显示文件打开失败的错误日志文件?_Python_Linux_Logging_Var_Error Log - Fatal编程技术网

Python linux是否有显示文件打开失败的错误日志文件?

Python linux是否有显示文件打开失败的错误日志文件?,python,linux,logging,var,error-log,Python,Linux,Logging,Var,Error Log,我花了几天时间跟踪python脚本中的一个bug(我不知道,web2py使用了与我期望的不同的根目录,导致文件读取以静默方式失败。因此,当从命令行运行时,代码很好,但当从web运行时,代码失败)。 终于找到了罪魁祸首之后,我可以修复无声故障(在一个库中,在本例中是openCV),但如果存在这种故障,一个更聪明的侦探会在某种系统日志中看到故障。然后,无论沉默的失败在哪里,我仍然能看到它,不必费力地追踪失败。 那么-linux是否有某种全局错误日志文件记录文件读取错误之类的事情? 是的,我知道有特定

我花了几天时间跟踪python脚本中的一个bug(我不知道,web2py使用了与我期望的不同的根目录,导致文件读取以静默方式失败。因此,当从命令行运行时,代码很好,但当从web运行时,代码失败)。 终于找到了罪魁祸首之后,我可以修复无声故障(在一个库中,在本例中是openCV),但如果存在这种故障,一个更聪明的侦探会在某种系统日志中看到故障。然后,无论沉默的失败在哪里,我仍然能看到它,不必费力地追踪失败。
那么-linux是否有某种全局错误日志文件记录文件读取错误之类的事情?
是的,我知道有特定于python的错误日志记录,但问题仍然存在。e、 g.如果我有一个复杂的项目,有一些python、一些C或其他什么,而某个地方有人在默默地失败,那么一个系统范围的错误日志将非常有帮助。

也许你可以发布读取该文件的代码?open()故障应始终生成
IOError
异常:

with open('no-such-file') as f:
    print f.read()

Traceback (most recent call last):
  File "app.py", line 1, in <module>
    with open('no-such-file') as f:
IOError: [Errno 2] No such file or directory: 'no-such-file'

这个解决方案的性能可能不足以满足您的需求,但不管怎样,我想报告我所做的一些研究,这些研究可能会引导您走向正确的方向

首先,linux系统中有/var/log下的日志记录。感兴趣的是syslog和messages文件,它们记录各种系统事件。但文件读取“错误”不会被记录,如下所述

在打开一个不存在的文件的情况下,我们最终会寻找一个失败的()。但是在这个低级别上没有异常的概念——如果open失败,它只返回一个负数。在C语言中,您可以打开一整天都不存在的文件,并且程序仍然返回0错误代码

这意味着您必须自己做一些工作来跟踪此问题。我认为您的问题是,“如何在低于python异常的级别上跟踪这些错误?”为此,您可以使用strace和grep的组合。您为每个进程附加strace,它会记录发生的所有系统调用

假设我们有一个C程序,看起来像这样:

#include <stdio.h>
int main()
{
    fopen("nothere.txt","r");
}
当然,您可以在python进程上运行strace以获得相同的结果

需要警惕的事情:

  • 您必须为每个进程附加此文件。如果你不这样做,我们又回到沉默的错误
  • Python生成大量的系统调用。您的日志文件可能会变大
  • 有很多IO错误。Enoont只是其中之一
  • 您将需要更复杂的字符串解析来过滤掉您不关心的系统调用

  • 当您的脚本由Web服务器运行时,错误消息通常会出现在服务器维护的日志中,因此您需要查看服务器是如何配置的。我知道这并没有完全回答你的问题(这就是为什么它出现在评论中:)。谢谢,但我没有寻找错误的来源-我已经找到了。我正在寻找一种方法,通过使用总是报告此类错误的系统错误日志,避免在将来查找此类错误。那我就不知道了;我唯一的建议是,如果库正在静默地捕获并忽略异常,那么就向库提出一个问题。没有跟踪这类事情的系统日志-异常的工作就是让您知道这些错误。
    #include <stdio.h>
    int main()
    {
        fopen("nothere.txt","r");
    }
    
    open("nothere.txt", O_RDONLY)           = -1 ENOENT (No such file or directory)