summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorachhina <amanschhina@gmail.com>2022-04-18 01:53:37 (GMT)
committerGitHub <noreply@github.com>2022-04-18 01:53:37 (GMT)
commit328dbc051f84bd5fdf61101bb4fa61d85f8b7feb (patch)
tree3ffed19a8c924015e0a3bf6368f13fc450a9921d
parent7173fd5de0cb259b488828634745c03dbea94e6b (diff)
downloadcpython-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.py10
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS.d/next/Library/2022-04-02-14-40-53.bpo-41395.Y1ZVvT.rst3
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")
diff --git a/Misc/ACKS b/Misc/ACKS
index 5e66a2e..a1df84c 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -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.