diff options
author | Éric Araujo <merwok@netwok.org> | 2012-11-03 21:06:52 (GMT) |
---|---|---|
committer | Éric Araujo <merwok@netwok.org> | 2012-11-03 21:06:52 (GMT) |
commit | 8f423c9359f75d26ee20c1e18f002743046abd72 (patch) | |
tree | 6a550df41d8e1707e85a41103fef08f0903d7b7e /Doc/library/functions.rst | |
parent | 0167edf8036eacc65fcfaead8ded157e7c7499ad (diff) | |
download | cpython-8f423c9359f75d26ee20c1e18f002743046abd72.zip cpython-8f423c9359f75d26ee20c1e18f002743046abd72.tar.gz cpython-8f423c9359f75d26ee20c1e18f002743046abd72.tar.bz2 |
Add examples for opener argument of open (#13424).
Patch by Guillaume Pratte.
Diffstat (limited to 'Doc/library/functions.rst')
-rw-r--r-- | Doc/library/functions.rst | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 0fb48f4..5df7b67 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -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 ``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 The *opener* parameter was added. The ``'x'`` mode was added. |