[Python-Dev] pathlib handling of trailing slash (Issue #21039) (original) (raw)

Antoine Pitrou antoine at python.org
Thu Aug 7 02:11:36 CEST 2014


Le 06/08/2014 18:36, Isaac Schwabacher a écrit :

If a symbolic link is encountered during pathname resolution, the behavior shall depend on whether the pathname component is at the end of the pathname and on the function being performed. If all of the following are true, then pathname resolution is complete: 1. This is the last pathname component of the pathname. 2. The pathname has no trailing . 3. The function is required to act on the symbolic link itself, or certain arguments direct that the function act on the symbolic link itself. In all other cases, the system shall prefix the remaining pathname, if any, with the contents of the symbolic link. [...]

So the only case where this would make a difference is when calling a "function acting on the symbolic link itself" (such as lstat() or unlink()) on a path with a trailing slash:

os.lstat('foo') os.stat_result(st_mode=41471, st_ino=1981954, st_dev=2050, st_nlink=1, st_uid=1000, st_gid=1000, st_size=4, st_atime=1407370025, st_mtime=1407370025, st_ctime=1407370025) os.lstat('foo/') os.stat_result(st_mode=17407, st_ino=917505, st_dev=2050, st_nlink=7, st_uid=0, st_gid=0, st_size=4096, st_atime=1407367916, st_mtime=1407369857, st_ctime=1407369857)

pathlib.Path('foo').lstat() os.stat_result(st_mode=41471, st_ino=1981954, st_dev=2050, st_nlink=1, st_uid=1000, st_gid=1000, st_size=4, st_atime=1407370037, st_mtime=1407370025, st_ctime=1407370025) pathlib.Path('foo/').lstat() os.stat_result(st_mode=41471, st_ino=1981954, st_dev=2050, st_nlink=1, st_uid=1000, st_gid=1000, st_size=4, st_atime=1407370037, st_mtime=1407370025, st_ctime=1407370025)

But you can also call resolve() explicitly if you want to act on the link target rather than the link itself:

pathlib.Path('foo/').resolve().lstat() os.stat_result(st_mode=17407, st_ino=917505, st_dev=2050, st_nlink=7, st_uid=0, st_gid=0, st_size=4096, st_atime=1407367916, st_mtime=1407369857, st_ctime=1407369857)

Am I overlooking other cases?

Regards

Antoine.



More information about the Python-Dev mailing list