simon mackenzie <simo...@gmail.com> added the comment:
For most people the expectation would be that it returns a path in the same format as any other path. Furthermore it seems odd to change the default behaviour after years when it worked as expected. I never heard of this substitute path before and it does not work in some circumstances e.g. docker does not recognise it. Note also that os.path.realpath(os.path.readlink("v1")) still returns \\\\?\\d:\\v1. There needs to be some way of getting to the path that everyone actually uses. On Mon, 18 Jan 2021 at 21:25, Eryk Sun <rep...@bugs.python.org> wrote: > > Eryk Sun <eryk...@gmail.com> added the comment: > > Symlinks and mountpoints (aka junctions) contain two forms of the target > path. There's a path that's intended for display in the shell, and there's > the actual substitute path to which the link resolves. os.readlink() was > changed to return the substitute path because the display form is not > mandated by filesystem protocols (it's sometimes missing, especially for > junctions) and not reliable (e.g. the display path may be a long path or > contain reserved names such that it's not valid without the \\?\ prefix). > It was decided to keep the C implementation of os.readlink() simple. > Whether to retain the \\?\ prefix was shifted to high-level functions that > consume the result of os.readlink(), such as os.path.realpath(). > > There was a previous issue related to this, in that the shutil module > copies symlinks via os.readlink() and os.symlink(), which thus copies only > the substitute path now. The issue was closed as not a bug, but had it been > resolved with new functionality, I would have preferred to do so with a > low-level function to copy a reparse point, not by reverting the behavior > of os.readlink(). I also see no reason against adding an option to > readlink() to return the display path instead of the substitute path, or to > just remove the prefix. But I'd vote against making it the default behavior. > > ---------- > components: +Library (Lib) > nosy: +eryksun > versions: +Python 3.10 > > _______________________________________ > Python tracker <rep...@bugs.python.org> > <https://bugs.python.org/issue42957> > _______________________________________ > ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue42957> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com