[Python-checkins] cpython (3.3): Add examples for opener argument of open (#13424).

eric.araujo python-checkins at python.org
Sat Nov 3 22:10:11 CET 2012


http://hg.python.org/cpython/rev/17b094c08600
changeset: 80219:17b094c08600
branch: 3.3
parent: 80214:e6d0951f412a
user: Éric Araujo <merwok at netwok.org>
date: Sat Nov 03 17:06:52 2012 -0400
summary:
 Add examples for opener argument of open (#13424).
Patch by Guillaume Pratte.
files:
 Doc/library/functions.rst | 30 +++++++++++++++++++++++++++
 Doc/library/io.rst | 3 ++
 Misc/ACKS | 1 +
 3 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -935,6 +935,36 @@
 :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.
diff --git a/Doc/library/io.rst b/Doc/library/io.rst
--- a/Doc/library/io.rst
+++ b/Doc/library/io.rst
@@ -498,6 +498,9 @@
 :mod:`os.open` as *opener* results in functionality similar to passing
 ``None``).
 
+ See the :func:`open` built-in function for examples on using the *opener*
+ parameter.
+
 .. versionchanged:: 3.3
 The *opener* parameter was added.
 The ``'x'`` mode was added.
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -929,6 +929,7 @@
 Iustin Pop
 Claudiu Popa
 John Popplewell
+Guillaume Pratte
 Amrit Prem
 Paul Prescod
 Donovan Preston
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /