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-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to