8000 [3.12] gh-85567: Fix resouce warnings in pickle and pickletools CLIs … · python/cpython@e132751 · GitHub
[go: up one dir, main page]

Skip to content

Commit e132751

Browse 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

File tree

3 files changed

+30
-13
lines changed

3 files changed

+30
-13
lines changed

Lib/pickle.py

Lines 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

Lines 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()
Lines 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