simon mackenzie <simo...@gmail.com> added the comment:
I note os.path.realpath("v1") does produce the right path in windows. Maybe that is what you meant. Will that work cross-platform? On Tue, 19 Jan 2021 at 18:48, simon mackenzie <simo...@gmail.com> wrote: > 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