Issue 26976: pathlib equivalent for os.path.realpath() (original) (raw)
pathlib doesn't provide an exact replacement for os.path.realpath().
Path.resolve() is the closest equivalent, but differs in behavior in one case: when the path does not exist.
os.path.realpath('/foo') '/foo'
Path('/foo').resolve() Traceback (most recent call last): File "", line 1, in File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/pathlib.py", line 1094, in resolve s = self._flavour.resolve(self) File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/pathlib.py", line 330, in resolve return _resolve(base, str(path)) or sep File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/pathlib.py", line 315, in _resolve target = accessor.readlink(newpath) File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/pathlib.py", line 422, in readlink return os.readlink(path) FileNotFoundError: [Errno 2] No such file or directory: '/foo'
This impairs pathlib usefulness to sanitize user input when I am about to create a file or a directory. The file does not exist yet, and pathlib doesn't provide an easy mean to validate whether the provided input is safe.