Jason R. Coombs <jar...@jaraco.com> added the comment:

Thanks Steve. While I was able to avoid the original symptom by not using 
readlink, I still think there's an issue here, both in the surprising behavior 
observed by shutil.copyfile, but also by the essential behavior of readlink. 
The more essential issue can be illustrated this simple problem: how could one 
write the `cmd.exe` `dir` command using Python? Using cmd.exe:

```
C:\Users\jaraco>mklink foo C:\USERS\jaraco\bar
symbolic link created for foo <<===>> C:\USERS\jaraco\bar

C:\Users\jaraco>dir foo
 Volume in drive C has no label.
 Volume Serial Number is B8F4-40BB

 Directory of C:\Users\jaraco

2020-05-26  02:04 AM    <SYMLINK>      foo [C:\USERS\jaraco\bar]
               1 File(s)              0 bytes
               0 Dir(s)  21,078,786,048 bytes free
```

Similarly in powershell:

```
PS C:\Users\jaraco> cmd /c mklink foo c:\users\jaraco\bar
symbolic link created for foo <<===>> c:\users\jaraco\bar
PS C:\Users\jaraco> dir 'foo' | ?{$_.LinkType} | select Target

Target
------
{c:\users\jaraco\bar}
```

Whether 'bar' exists or not, it seems to me that these tools use the "print 
name" to render the next hop of the link to the user (even if that target 
doesn't exist).

`realpath` doesn't provide this functionality and neither does `readlink`.

Perhaps more importantly, the "print name" is lost when copying the file using 
shutil, but for the same underlying reason--the print name is not exposed by 
the low level API, and the result is that implementation details about the 
platform leak out to the user interface.

If "\\?\C:\Users\jaraco\bar" is the more correct form of the target, then 
shouldn't these tools also be exposing that value to the user? How would a 
Python developer wishing to implement the dir command do so? Is there a way to 
retain the fidelity of the print name during an shutil.copy?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue40654>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to