diff options
author | achhina <amanschhina@gmail.com> | 2022-04-18 01:53:37 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-18 01:53:37 (GMT) |
commit | 328dbc051f84bd5fdf61101bb4fa61d85f8b7feb (patch) | |
tree | 3ffed19a8c924015e0a3bf6368f13fc450a9921d | |
parent | 7173fd5de0cb259b488828634745c03dbea94e6b (diff) | |
download | cpython-328dbc051f84bd5fdf61101bb4fa61d85f8b7feb.zip cpython-328dbc051f84bd5fdf61101bb4fa61d85f8b7feb.tar.gz cpython-328dbc051f84bd5fdf61101bb4fa61d85f8b7feb.tar.bz2 |
gh-85567: Register a cleanup function to close files for FileType objects in argparse (#32257)
* bpo-41395: Register a cleanup function to close files for FileType objects in argparse
* Added import as top level import, and renamed file as fh.
-rw-r--r-- | Lib/argparse.py | 10 | ||||
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2022-04-02-14-40-53.bpo-41395.Y1ZVvT.rst | 3 |
3 files changed, 11 insertions, 3 deletions
diff --git a/Lib/argparse.py b/Lib/argparse.py index 429a72a..881dfda 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -84,7 +84,7 @@ __all__ = [ 'ZERO_OR_MORE', ] - +import atexit as _atexit import os as _os import re as _re import sys as _sys @@ -1268,8 +1268,12 @@ class FileType(object): # all other arguments are used as file names try: - return open(string, self._mode, self._bufsize, self._encoding, - self._errors) + fh = open(string, self._mode, self._bufsize, self._encoding, self._errors) + + # Register cleanup function to close file + _atexit.register(fh.close) + + return fh except OSError as e: args = {'filename': string, 'error': e} message = _("can't open '%(filename)s': %(error)s") @@ -313,6 +313,7 @@ Nicolas Chauvat Jerry Chen Michael Chermside Ingrid Cheung +Adam Chhina Terry Chia Albert Chin-A-Young Adal Chiriliuc diff --git a/Misc/NEWS.d/next/Library/2022-04-02-14-40-53.bpo-41395.Y1ZVvT.rst b/Misc/NEWS.d/next/Library/2022-04-02-14-40-53.bpo-41395.Y1ZVvT.rst new file mode 100644 index 0000000..5358b0e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-04-02-14-40-53.bpo-41395.Y1ZVvT.rst @@ -0,0 +1,3 @@ +FileType objects from argparse may not be closed and lead to +ResourceWarning. Register a file.close function with atexit for FileType +objects to ensure they are closed. Patch Contributed by Adam Chhina. |