不使用os.chdir()在python中创建相对符号链接
假设我有一个文件的路径:不使用os.chdir()在python中创建相对符号链接,python,multithreading,symlink,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/dir
/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
您可以将第二个参数设置为目标,如:
import os
os.symlink('file.ext', '/path/to/some/directory/symlink')
您还可以使用
os.path.relpath()
,以便可以将符号链接与相对路径一起使用。假设您的脚本位于目录foo/
中,该目录具有子目录src/
和dst/
,并且您希望在dst/
中创建相对符号链接,以指向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
目录树的tarball,相对符号链接非常有用,因为我不相信tar
会更新符号链接以指向生成的tarball内的相对路径。Doh!谢谢你。这完全有道理,而且我觉得没有尝试过这一点很愚蠢。只要确保链接文件不存在,或者最好将其删除os.remove(“/path/to/some/directory/symlink”)
对于该工作,您必须位于'file.ext'
文件夹中,因此您可能必须使用os.chdir()
@JeanPaul No,这不是真的,它可以从您当前的工作目录工作。试试看。@lenz我的错,它在工作,似乎我没有正确测试。只是警告:你的解决方案看起来不错,给我留下了深刻的印象。我试着把它应用到稍微不同的情况relpath
似乎——根据其他讨论——不是很普遍。python relpath函数仅适用于应用于完整文件路径的目录,但它并不总是产生预期的结果(我通常注意到,当只需要/../../..
时,它包括/..
)。