os.symlink(src, dst)
的Python 3.7文档是Create a symbolic link pointing to src named dst.
让我们想象一下这个工作目录:
+-- nb.ipynb
+-- dir1
| +-- file1
+-- dir2
假设我想在
dir2
中创建一个名为filed2
的符号链接(symbolic link),该链接指向笔记本dir1/file1
中的nb.ipynb
。在笔记本的一个单元格中,我将输入:
import os
os.symlink('dir1/file1', 'dir2/file2')
但是,这将不起作用,这将在dir2中创建一个file2,但是当您查看该文件的属性时,其
Type
为Link(broken) (inode/symlink)
,其Link target
为dir1/file1
。 Link目标是您在os.symlink中作为src放置的内容。为了实现正确的符号链接(symbolic link),需要做的是
os.symlink('../dir1/file1', 'dir2/file2')
这意味着
os.symlink(src, dest)
,src
应该包含源相对于目标的路径。由于必须多次创建此类符号链接(symbolic link),因此创建了以下函数:
def symlink_rel(src, dst):
rel_path_src = os.path.relpath(src, os.path.dirname(dst))
os.symlink(rel_path_src, dst)
呼唤
symlink_rel('dir1/file1', 'dir2/file2')
将创建正确的符号链接(symbolic link)。在我看来,os.symlink的行为不像文档所说的那样。为什么
os.symlink
需要src
相对于src
成为dst
的路径,而不是src
和dst
成为从工作目录开始的路径? 最佳答案
os.symlink('dir1/file1', 'dir2/file2')
软链接(soft link)保存文件的原始位置,这意味着“dir2/file2”保存位置“dir1/file1”。当您将文件“dir2/file2”设为目录时,这将在目录“dir2/”中搜索“dir1/file1”,目录“dir2/”是“file2”的工作目录,并且在dir2中没有名为“dir1/file1”的路径
os.symlink('../dir1/file1', 'dir2/file2')
当您将此文件dir2/file2设置为目录时,“file2”的父目录为“dir2”。
与上面相同。区别在于“..”意味着从您现在所在的位置进入一个目录。从该位置转到“dir1/file1”,这样它将起作用。
关于python - 为什么os.symlink使用相对于目的地的路径?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54825010/