gpt4 book ai didi

python - 为什么 os.symlink 使用相对于目标的路径?

转载 作者:行者123 更新时间:2023-11-28 17:00:36 25 4
gpt4 key购买 nike

os.symlink(src, dst) 的 Python 3.7 文档是创建一个指向名为 dst 的 src 的符号链接(symbolic link)。

让我们想象一下这个工作目录:

+-- nb.ipynb
+-- dir1
| +-- file1
+-- dir2

假设我想在 dir2 中创建一个名为 filed2 的符号链接(symbolic link),指向笔记本 nb 中的 dir1/file1。 ipynb.

在笔记本的一个单元格中,我将:

import os
os.symlink('dir1/file1', 'dir2/file2')

然而,这是行不通的,这会在 dir2 中创建一个 file2,但是当你查看这个文件的属性时,它的 TypeLink(broken) (inode/symlink),它的链接目标dir1/file1。链接目标是您在 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 需要 srcsrc 相对于 dst 的路径而不是 srcdst 是工作目录的路径?

最佳答案

os.symlink('dir1/file1', 'dir2/file2') 

软链接(soft link)保存文件的原始位置,即“dir2/file2”保存位置“dir1/file1”。当您搜索文件“dir2/file2”时,这将在“dir2/”目录中搜索“dir1/file1”,这是“file2”的工作目录,并且 dir2 中没有名为“dir1/file1”的路径

os.symlink('../dir1/file1', 'dir2/file2')

当你 cat 这个文件 dir2/file2 时,“file2”的父目录是“dir2”。与上面相同。不同之处在于“..”表示从您现在所在的位置转到一个目录。从那个位置转到“dir1/file1”,这样它就可以工作了。

Don't consider your working directory, consider the softlinks parentdirectory and read the location based on that

关于python - 为什么 os.symlink 使用相对于目标的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54825010/

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