gpt4 book ai didi

python - 使用 Python 查找损坏的符号链接(symbolic link)

转载 作者:IT老高 更新时间:2023-10-28 20:36:57 25 4
gpt4 key购买 nike

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

最佳答案

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

一个典型的错误是这样写:

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

如果在你的 if 测试之后有其他东西删除了第二个调用 (os.unlink),它可能会失败,引发一个异常,并停止你的函数的其余部分执行。 (您可能认为这在现实生活中不会发生,但上周我们刚刚从我们的代码库中发现了另一个类似的错误 - 正是这种错误让一些程序员摸不着头脑并声称为“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 为不存在的符号链接(symbolic link)和损坏的符号链接(symbolic link)返回相同的错误代码。

所以,我想你别无选择,只能打破原子性,做类似的事情

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

关于python - 使用 Python 查找损坏的符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com