Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e132751

Browse filesBrowse files
[3.12] gh-85567: Fix resouce warnings in pickle and pickletools CLIs (GH-113618) (GH-113758)
Explicitly open and close files instead of using FileType. (cherry picked from commit bd754b9) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
1 parent d43f2ad commit e132751
Copy full SHA for e132751

File tree

Expand file treeCollapse file tree

3 files changed

+30
-13
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+30
-13
lines changed

‎Lib/pickle.py

Copy file name to clipboardExpand all lines: Lib/pickle.py
+7-3Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1791,7 +1791,7 @@ def _test():
17911791
parser = argparse.ArgumentParser(
17921792
description='display contents of the pickle files')
17931793
parser.add_argument(
1794-
'pickle_file', type=argparse.FileType('br'),
1794+
'pickle_file',
17951795
nargs='*', help='the pickle file')
17961796
parser.add_argument(
17971797
'-t', '--test', action='store_true',
@@ -1807,6 +1807,10 @@ def _test():
18071807
parser.print_help()
18081808
else:
18091809
import pprint
1810-
for f in args.pickle_file:
1811-
obj = load(f)
1810+
for fn in args.pickle_file:
1811+
if fn == '-':
1812+
obj = load(sys.stdin.buffer)
1813+
else:
1814+
with open(fn, 'rb') as f:
1815+
obj = load(f)
18121816
pprint.pprint(obj)

‎Lib/pickletools.py

Copy file name to clipboardExpand all lines: Lib/pickletools.py
+21-10Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2848,10 +2848,10 @@ def _test():
28482848
parser = argparse.ArgumentParser(
28492849
description='disassemble one or more pickle files')
28502850
parser.add_argument(
2851-
'pickle_file', type=argparse.FileType('br'),
2851+
'pickle_file',
28522852
nargs='*', help='the pickle file')
28532853
parser.add_argument(
2854-
'-o', '--output', default=sys.stdout, type=argparse.FileType('w'),
2854+
'-o', '--output',
28552855
help='the file where the output should be written')
28562856
parser.add_argument(
28572857
'-m', '--memo', action='store_true',
@@ -2876,15 +2876,26 @@ def _test():
28762876
if args.test:
28772877
_test()
28782878
else:
2879-
annotate = 30 if args.annotate else 0
28802879
if not args.pickle_file:
28812880
parser.print_help()
2882-
elif len(args.pickle_file) == 1:
2883-
dis(args.pickle_file[0], args.output, None,
2884-
args.indentlevel, annotate)
28852881
else:
2882+
annotate = 30 if args.annotate else 0
28862883
memo = {} if args.memo else None
2887-
for f in args.pickle_file:
2888-
preamble = args.preamble.format(name=f.name)
2889-
args.output.write(preamble + '\n')
2890-
dis(f, args.output, memo, args.indentlevel, annotate)
2884+
if args.output is None:
2885+
output = sys.stdout
2886+
else:
2887+
output = open(args.output, 'w')
2888+
try:
2889+
for arg in args.pickle_file:
2890+
if len(args.pickle_file) > 1:
2891+
name = '<stdin>' if arg == '-' else arg
2892+
preamble = args.preamble.format(name=name)
2893+
output.write(preamble + '\n')
2894+
if arg == '-':
2895+
dis(sys.stdin.buffer, output, memo, args.indentlevel, annotate)
2896+
else:
2897+
with open(arg, 'rb') as f:
2898+
dis(f, output, memo, args.indentlevel, annotate)
2899+
finally:
2900+
if output is not sys.stdout:
2901+
output.close()
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix resource warnings for unclosed files in :mod:`pickle` and
2+
:mod:`pickletools` command line interfaces.

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.