当前位置: 首页 > 面试题库 >

使用Python查找损坏的符号链接

奚和光
2023-03-14
问题内容

如果我调用os.stat()break
symlink,python会抛出OSError异常。这对于找到它们很有用。但是,还有其他一些原因os.stat()可能会引发类似的异常。symlinks在Linux下,是否有更精确的方法来检测Python
损坏的情况?


问题答案:

Python常见的说法是,请求宽恕比允许许可容易。尽管我不喜欢现实生活中的这种说法,但它确实适用于许多情况。通常,您要避免将两个系统调用链接到同一文件的代码,因为您不知道在代码中的两次调用之间文件将发生什么。

一个典型的错误是写类似

if os.path.exists(path):
    os.unlink(path)

如果第二次调用(os.unlink)在if测试后因其他原因被删除,则可能会失败,并引发异常并停止执行其余函数。(您可能会认为这在现实生活中不会发生,但是上周我们只是在我们的代码库中钓出了另一个类似的错误-
正是这种错误使一些程序员挠头并声称“ Heisenbug”最近几个月)

因此,在您的特定情况下,我可能会这样做:

try:
    os.stat(path)
except OSError, e:
    if e.errno == errno.ENOENT:
        print 'path %s does not exist or is a broken symlink' % path
    else:
        raise e

烦人的是,stat对于不存在的符号链接和损坏的符号链接返回相同的错误代码。

因此,我想您别无选择,只能打破原子性,并做类似的事情

if not os.path.exists(os.readlink(path)):
    print 'path %s is a broken symlink' % path


 类似资料:
  • 我试图从一个网站下载所有pdf文件,但创建的每个pdf都已损坏。。。

  • 问题内容: 大家好,我需要在linux中执行此操作: 给出:文件名“ foo.txt” 查找:所有符号链接到“ foo.txt”的文件 怎么做?谢谢! 问题答案: 这取决于是否要查找指向特定文件的链接,那么这是唯一的好方法: 另一方面,如果您只是想查找指向恰好名为的 任何 文件的链接,则类似 要么

  • 问题内容: 我试图以一种内存高效的方式(例如从磁盘延迟流式传输而不是将整个文件加载到内存中)来使用lxml解析巨大的xml文件。不幸的是,文件包含一些坏的ascii字符,破坏了默认的解析器。如果我设置了restore = True,则解析器可以工作,但是iterparse方法不使用restore参数或自定义解析器对象。有谁知道如何使用iterparse解析损坏的xml? 谢谢你的帮助! 编辑-这是

  • 我正在尝试创建一个zip文件,以便能够通过http发送多个文件。 我的问题是,生成的Zip文件在发送之前和之后都“损坏”。问题是我无法找到我做错了什么,因为我在控制台中没有收到任何错误。 那么,有人有一个想法文件我生成的zip文件损坏? 这是我的代码: 谢谢你的帮助!

  • 我用Python编写了这个正则表达式并在regex101上进行了测试,但它仍然没有按照我想要的方式工作: 我试图找到的是一种模式,其中字符串可以选择以这些符号之一开头或结尾,中间只有数字: 该列表包括破折号、正斜杠、反斜杠、括号、符号、空格和句号。如果字符串只包含中间的数字,并且在字符串的开头和/或结尾有可选标点,则搜索应返回true。 此正则表达式似乎适用于大多数情况,但如果我在中间的数字中添加

  • 我修改了一个phonegap插件。Java部分输出一个base64字符串: 然后我将它传递给某个Javascript,然后将字符串发送给服务器。我已经检查了.php文件接收到的字符串,base64字符串是相同的。然而,当我解码base64字符串时,它似乎已损坏。为了更好的示例,将此文本文件的内容复制到解码器中。 注意:当.php文件尝试解码它的数据:image/png;base64在前面时,我只是