This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Support for file descriptor params in os.path
Type: enhancement Stage:
Components: Documentation Versions: Python 3.7, Python 3.6, Python 3.4, Python 3.5
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: docs@python Nosy List: Mateusz Kurek, docs@python, eric.araujo, serhiy.storchaka
Priority: normal Keywords:

Created on 2017-10-26 05:33 by Mateusz Kurek, last changed 2022-04-11 14:58 by admin.

Messages (3)
msg305023 - (view) Author: Mateusz Kurek (Mateusz Kurek) Date: 2017-10-26 05:33
Since Python 3.3, some os module functions, like os.stat (https://docs.python.org/3/library/os.html#os.stat), support passing file descriptor instead of a path. os.path functions, on the other hand (like os.path.exists - https://docs.python.org/3/library/os.path.html#os.path.exists - or os.path.samefile - https://docs.python.org/3/library/os.path.html#os.path.samefile) mention using os.stat underneath, but according to documentation, does not support passing file descriptor instead of a path (at least it's not mentioned in the docs that this feature is supported). Is this intentional (os.path functions should not take file descriptor params) or this feature is officialy supported, but it's ommited in the docs?
msg305129 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2017-10-27 17:52
> support passing file descriptor instead of a path. os.path functions

Are you sure about that?  The docs for os.stat show the dir_fd parameter, used to avoid directory renaming issues or attacks, but it doesn’t say that the *path* argument can be an int file descriptor instead of a str file path.
msg305152 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2017-10-28 09:49
Éric, see https://docs.python.org/3/library/os.html#files-and-directories.

Yes, now some os.path functions can accept a file descriptor as a path. I don't think this is intentional. And this may not work on all platforms.

>>> os.path.isdir(1)
False
>>> os.path.islink(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/serhiy/py/cpython/Lib/posixpath.py", line 169, in islink
    st = os.lstat(path)
TypeError: lstat: path should be string, bytes or os.PathLike, not int
History
Date User Action Args
2022-04-11 14:58:53adminsetgithub: 76052
2017-10-28 09:49:54serhiy.storchakasetnosy: + serhiy.storchaka
messages: + msg305152
2017-10-27 17:52:41eric.araujosetnosy: + eric.araujo
messages: + msg305129
2017-10-26 05:33:13Mateusz Kurekcreate