Commit 8f423c93 authored by Éric Araujo's avatar Éric Araujo

Add examples for opener argument of open (#13424).

Patch by Guillaume Pratte.
parent 0167edf8
...@@ -935,6 +935,36 @@ are always available. They are listed here in alphabetical order. ...@@ -935,6 +935,36 @@ are always available. They are listed here in alphabetical order.
:mod:`os.open` as *opener* results in functionality similar to passing :mod:`os.open` as *opener* results in functionality similar to passing
``None``). ``None``).
The following example is an alternative implementation for opening files
for exclusive writing. If we did not have support for the ``'x'`` mode,
we could implement it with this opener::
>>> import os
>>> def open_exclusive(path, mode):
... return os.open(path, mode | os.O_CREAT | os.O_EXCL)
...
>>> filename = 'spam.txt'
>>> fp = open(filename, 'w', opener=open_exclusive)
>>> fp2 = open(filename, 'w', opener=open_exclusive)
Traceback (most recent call last):
...
FileExistsError: [Errno 17] File exists: 'spam.txt'
This other example uses the :ref:`dir_fd` parameter of the
:func:`os.open` function to open a file relative to a given directory::
>>> import os
>>> def open_relative(dirname):
... dir_fd = os.open(dirname, os.O_RDONLY)
... def opener(path, flags):
... return os.open(path, flags, dir_fd=dir_fd)
... return opener
...
>>> opener = open_relative('somedir')
>>> with open('spamspam.txt', 'w', opener=opener) as f:
... print('This will be written to somedir/spamspam.txt', file=f)
...
.. versionchanged:: 3.3 .. versionchanged:: 3.3
The *opener* parameter was added. The *opener* parameter was added.
The ``'x'`` mode was added. The ``'x'`` mode was added.
......
...@@ -498,6 +498,9 @@ Raw File I/O ...@@ -498,6 +498,9 @@ Raw File I/O
:mod:`os.open` as *opener* results in functionality similar to passing :mod:`os.open` as *opener* results in functionality similar to passing
``None``). ``None``).
See the :func:`open` built-in function for examples on using the *opener*
parameter.
.. versionchanged:: 3.3 .. versionchanged:: 3.3
The *opener* parameter was added. The *opener* parameter was added.
The ``'x'`` mode was added. The ``'x'`` mode was added.
......
...@@ -929,6 +929,7 @@ Michael Pomraning ...@@ -929,6 +929,7 @@ Michael Pomraning
Iustin Pop Iustin Pop
Claudiu Popa Claudiu Popa
John Popplewell John Popplewell
Guillaume Pratte
Amrit Prem Amrit Prem
Paul Prescod Paul Prescod
Donovan Preston Donovan Preston
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment