python - 在不使用 os.chdir() 的情况下在 python 中创建相对符号链接(symbolic link)

标签 python multithreading symlink

假设我有一个文件路径:

/path/to/some/directory/file.ext

在 python 中,我想在与文件相同的目录中创建一个符号链接(symbolic link),即 指向文件。我想以此结束:

/path/to/some/directory/symlink -> file.ext

我可以很容易地使用 os.chdir() 来 cd 到目录中,然后 创建符号链接(symbolic link)。但是 os.chdir() 不是线程安全的,所以我想避免 使用它。假设进程的当前工作目录不是 包含文件的目录 (os.getcwd() != '/path/to/some/directory'), 执行此操作的最佳方法是什么?

我想我可以在我所在的任何目录中创建一个失效链接,然后 将其移动到包含文件的目录:

import os, shutil
os.symlink('file.ext', 'symlink')
shutil.move('symlink', '/path/to/some/directory/.')

有更好的方法吗?

请注意,我不想以这样的方式结束:

/path/to/some/directory/symlink -> /path/to/some/directory/file.ext

最佳答案

您还可以使用 os.path.relpath()这样您就可以将符号链接(symbolic link)与相对路径一起使用。假设您的脚本位于目录 foo/ 中这个目录有子目录 src/dst/ ,并且您想在 dst/ 中创建相关符号链接(symbolic link)指向 src/ 中的文件.为此,您可以:

import os
from glob import glob
for src_path in glob('src/*'):
    os.symlink(
        os.path.relpath(
            src_path,
            'dst/'
        ),
        os.path.join('dst', os.path.basename(src_path))
    )

列出 dst/ 的内容然后显示:

1.txt -> ../src/1.txt
2.txt -> ../src/2.txt

如果您想创建整个 foo 的压缩包,相对符号链接(symbolic link)很有用。目录树,我不相信tar更新符号链接(symbolic link)以指向生成的压缩包内的相对路径。

关于python - 在不使用 os.chdir() 的情况下在 python 中创建相对符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9793631/

相关文章:

java - 终止轮询 HTTP 请求

使用符号链接(symbolic link)的 PHP/Linux 读取文件路径

Python 日志记录 - DEBUG 下面有什么东西吗?

python - Keras LSTM 尝试创建模型架构时出现多个错误

java - 如何终止从 ExecutorService 生成的线程

unix - 我们可以在 UNIX 中创建指向符号链接(symbolic link)的硬链接(hard link)吗?

c++ - 使用 boost 文件系统查找循环符号链接(symbolic link)

python - 可以将 numpy 数组添加到 python 集中吗?

python - pandas 中具有多索引的 groupby 的平均值

java - 一个 Java applet 中的两个线程最佳实践