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

时间:2012-03-20 19:33:26

标签: python multithreading symlink

说我有一个文件的路径:

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

在python中,我想在与文件相同的目录中创建一个符号链接 指向该文件。我想最终得到这个:

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

我可以使用os.chdir()相当容易地执行此操作来cd到目录中 创建符号链接。但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

2 个答案:

答案 0 :(得分:19)

您还可以使用os.path.relpath(),以便可以使用带有相对路径的符号链接。假设您的脚本位于目录foo/中,并且此目录包含子目录src/dst/,并且您希望在dst/中创建相对符号链接以指向{{}中的文件1}}。为此,您可以这样做:

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 目录树的tarball,相对符号链接很有用,因为我不相信foo更新符号链接指向生成的tarball内部的相对路径

答案 1 :(得分:13)

您可以将第二个参数设置为目标,例如:

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