【问题标题】:How to create symlink in Python using only relative paths如何仅使用相对路径在 Python 中创建符号链接
【发布时间】:2017-02-27 19:19:47
【问题描述】:

考虑一个简单的函数来创建一个目录,然后是一个指向该目录的符号链接,所有这些都需要假定在当前工作目录下。如果目录和链接直接位于当前工作目录中,则此过程成功。但是当目录和链接进一步嵌套时,目录创建成功,而创建的符号链接被破坏并指向错误的路径。

In [1]: def make_dir_and_symlink(dir_relative_to_cwd, sym_relative_to_cwd):
   ...:     os.mkdir(dir_relative_to_cwd)
   ...:     os.symlink(dir_relative_to_cwd, sym_relative_to_cwd)
   ...:     

In [2]: make_dir_and_symlink("test", "test-link")

In [3]: os.path.exists("test")
Out[3]: True

In [4]: os.path.exists("test-link")
Out[4]: True

In [5]: make_dir_and_symlink("test/other-test", "test/other-test-link")

In [6]: os.path.exists("test/other-test")
Out[6]: True

In [7]: os.path.exists("test/other-test-link")
Out[7]: False

在第二个示例中不使用任何绝对路径,如何在相对于当前工作目录的路径中的某处创建符号链接?

【问题讨论】:

    标签: python operating-system relative-path symlink


    【解决方案1】:

    在有限的情况下,这似乎可以通过结合os.path.relpathos.path.basename 来实现:

    def make_dir_and_symlink(dir_relative_to_cwd, sym_relative_to_cwd):
        os.mkdir(dir_relative_to_cwd)
        target_name = os.path.basename(
            os.path.relpath(dir_relative_to_cwd, sym_relative_to_cwd)
        )
        os.symlink(target_name, sym_relative_to_cwd)
    
    
    
    In [1]: def make_dir_and_symlink(dir_relative_to_cwd, sym_relative_to_cwd):
       ...:     os.mkdir(dir_relative_to_cwd)
       ...:     os.symlink(os.path.basename(os.path.relpath(dir_relative_to_cwd, sym_relative_to_cwd)), sym_relative_to_cwd)
       ...:     
    
    In [2]: make_dir_and_symlink("test", "test-link")
    
    In [3]: os.path.exists("test")
    Out[3]: True
    
    In [4]: os.path.exists("test-link")
    Out[4]: True
    
    In [5]: make_dir_and_symlink("test/other-test", "test/other-test-link")
    
    In [6]: os.path.exists("test/other-test")
    Out[6]: True
    
    In [7]: os.path.exists("test/other-test-link")
    Out[7]: True
    

    当符号链接位置相对于目标位置可以是任意的时,预计这不会处理一般情况。 os.path.basename 将只返回路径名的直接基组件,因此它在这种情况下有效,因为它进一步假设目标及其符号链接从当前工作目录开始在树中彼此相邻。

    不需要解析绝对路径,但仍允许链接名称在当前工作目录中相对于目标名称是任意的解决方案非常有价值。

    【讨论】:

      猜你喜欢
      • 2015-06-28
      • 1970-01-01
      • 2019-01-09
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多