![]() |
1
22
巨蟒常说,请求宽恕比允许更容易。虽然我在现实生活中并不喜欢这种说法,但它在很多情况下都适用。通常,您希望避免在同一个文件上链接两个系统调用的代码,因为您永远不知道在您的代码中的两个调用之间文件会发生什么。 典型的错误是写 :
第二个调用(os.unlink)可能会失败,如果在if测试后有其他东西删除了它,引发异常,并停止执行函数的其余部分。(你可能认为这在现实生活中不会发生,但上周我们从代码库中发现了另一个这样的bug——正是这种bug让一些程序员抓耳挠腮,在过去的几个月里声称是“Heisenbug”)。 所以,在你的特殊情况下,我可能会这样做:
这里的麻烦之处在于,stat为一个不存在的symlink和一个断开的symlink返回相同的错误代码。 所以,我想你别无选择,只能打破原子性,做一些类似的事情
|
![]() |
2
12
os.lstat() 可能会有所帮助。如果lstat()成功而stat()失败,那么它可能是一个断开的链接。 |
![]() |
3
10
这不是原子的,但它起作用。
确实由 RTFM (阅读神奇手册)我们看到了
它还说:
因此,如果您担心权限问题,那么应该添加其他子句。 |
![]() |
4
4
我能提到没有python的硬链接测试吗?/bin/test的file1-ef file2条件在文件共享inode时为真。
因此,有点像
这让我开始阅读
我确实发现了
|
![]() |
5
2
|
![]() |
6
1
我不是巨蟒,但看起来像os.readlink()?我在Perl中使用的逻辑是使用readlink()来查找目标,使用stat()来测试目标是否存在。 编辑:我弹出了一些演示readlink的Perl。我相信Perl的stat和readlink以及python的os.stat()和os.readlink()都是系统调用的包装器,因此这应该能够合理地解释概念代码:
|
![]() |
7
0
我有一个类似的问题:如何捕捉断开的符号链接,即使它们出现在某个父目录中?我还希望记录所有这些文件(在处理大量文件的应用程序中),但不要重复太多。 这是我想到的,包括单元测试。 软疣 :
单元测试:
|