Search code examples
pythonmultithreadingsymlink

Creating a relative symlink in python without using os.chdir()


Say I have a path to a file:

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

In python, I'd like to create a symlink in the same directory as the file, that points to the file. I'd like to end up with this:

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

I can do this fairly easily using os.chdir() to cd into the directory and create the symlinks. But os.chdir() is not thread safe, so I'd like to avoid using it. Assuming that the current working directory of the process is not the directory with the file (os.getcwd() != '/path/to/some/directory'), what's the best way to do this?

I guess I could create a busted link in whatever directory I'm in, then move it to the directory with the file:

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

Is there a better way to do this?

Note, I don't want to end up with is this:

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

Solution

  • You could just set the second argument to the destination, like:

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