Python无法打开符号链接文件

Tom*_*Tom 6 python symlink

Python无法打开我的simlinked文件.我确保文件存在,我可以访问它.我的印象是在操作系统级别上解析了符号链接,因此Python永远不会知道它.

therold@therold:~/Programming/ML/deeptank/dataset/inc (master)$ ls -lisa  /Users/therold/Programming/ML/deeptank/dataset/inc/training/tanks/matilda-iv_689.png
7870541 8 lrwxr-xr-x  1 therold  staff  46 13 Mai 16:44 /Users/therold/Programming/ML/deeptank/dataset/inc/training/tanks/matilda-iv_689.png -> ../training_data/matilda-iv/matilda-iv_689.png
Run Code Online (Sandbox Code Playgroud)

OSX显然能够解析符号链接的图像文件.但是Python open()方法让我失望:

therold@therold:~/Programming/ML/deeptank/dataset/inc (master)$ python
Python 2.7.10 (default, Sep 23 2015, 04:34:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.72)] on darwin
>>> open("/Users/therold/Programming/ML/deeptank/dataset/inc/training/tanks/matilda-iv_689.png")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: '/Users/therold/Programming/ML/deeptank/dataset/inc/training/tanks/matilda-iv_689.png'
>>>
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?非常感谢帮助.

Rob*_*obᵩ 8

我有什么想法我做错了吗?

符号链接的目标不存在.

我不明白为什么我能在我的问题中的ls语句中解决它.

你不是.

ls默认情况下,该命令在链接本身上运行,而不是在链接的目标上运行.如果没有该-L选项,则ls永远不要尝试解析符号链接.

考虑一个包含这两个文件的目录:

$ ls -l
-rw-rw-r-- 1 me me 6 May 13 11:58 a
lrwxrwxrwx 1 me me 3 May 13 12:00 b -> ./a
Run Code Online (Sandbox Code Playgroud)

a是一个包含六个字节的文本文件'hello\n'.b是一个包含目标路径的三个字节的链接文件:'./a'.ls能够不解除引用链接本身的情况下描述链接的属性.

相反,使用-L选项:

$ ls -lL
-rw-rw-r-- 1 me me 6 May 13 11:58 a
-rw-rw-r-- 1 me me 6 May 13 11:58 b
Run Code Online (Sandbox Code Playgroud)

现在ls已解决链接b,并显示有关链接到文件的信息.随着-L,ls现在宣称这b也是一个六字节的文本文件.

最后,考虑一下:

$ rm a
$ ls -l
lrwxrwxrwx 1 me me 3 May 13 12:00 b -> ./a
$ ls -lL
ls: cannot access b: No such file or directory
l????????? ? ? ? ?            ? b
Run Code Online (Sandbox Code Playgroud)

现在b是一个解析为不再存在的文件的链接.由于ls -l从不尝试解析链接,因此其输出与先前的测试相同.(b是一个链接文件,3个字节长,内容'./a'.)

ls -lL尝试解决链接失败并显示失败信息.