Skip to content

Commit

Permalink
pythongh-85567: Fix resouce warnings in pickle and pickletools CLIs (p…
Browse files Browse the repository at this point in the history
…ythonGH-113618)

Explicitly open and close files instead of using FileType.
  • Loading branch information
serhiy-storchaka authored Jan 5, 2024
1 parent 3c4e972 commit bd754b9
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 13 deletions.
10 changes: 7 additions & 3 deletions Lib/pickle.py
Original file line number Diff line number Diff line change
Expand Up @@ -1793,7 +1793,7 @@ def _test():
parser = argparse.ArgumentParser(
description='display contents of the pickle files')
parser.add_argument(
'pickle_file', type=argparse.FileType('br'),
'pickle_file',
nargs='*', help='the pickle file')
parser.add_argument(
'-t', '--test', action='store_true',
Expand All @@ -1809,6 +1809,10 @@ def _test():
parser.print_help()
else:
import pprint
for f in args.pickle_file:
obj = load(f)
for fn in args.pickle_file:
if fn == '-':
obj = load(sys.stdin.buffer)
else:
with open(fn, 'rb') as f:
obj = load(f)
pprint.pprint(obj)
31 changes: 21 additions & 10 deletions Lib/pickletools.py
Original file line number Diff line number Diff line change
Expand Up @@ -2848,10 +2848,10 @@ def _test():
parser = argparse.ArgumentParser(
description='disassemble one or more pickle files')
parser.add_argument(
'pickle_file', type=argparse.FileType('br'),
'pickle_file',
nargs='*', help='the pickle file')
parser.add_argument(
'-o', '--output', default=sys.stdout, type=argparse.FileType('w'),
'-o', '--output',
help='the file where the output should be written')
parser.add_argument(
'-m', '--memo', action='store_true',
Expand All @@ -2876,15 +2876,26 @@ def _test():
if args.test:
_test()
else:
annotate = 30 if args.annotate else 0
if not args.pickle_file:
parser.print_help()
elif len(args.pickle_file) == 1:
dis(args.pickle_file[0], args.output, None,
args.indentlevel, annotate)
else:
annotate = 30 if args.annotate else 0
memo = {} if args.memo else None
for f in args.pickle_file:
preamble = args.preamble.format(name=f.name)
args.output.write(preamble + '\n')
dis(f, args.output, memo, args.indentlevel, annotate)
if args.output is None:
output = sys.stdout
else:
output = open(args.output, 'w')
try:
for arg in args.pickle_file:
if len(args.pickle_file) > 1:
name = '<stdin>' if arg == '-' else arg
preamble = args.preamble.format(name=name)
output.write(preamble + '\n')
if arg == '-':
dis(sys.stdin.buffer, output, memo, args.indentlevel, annotate)
else:
with open(arg, 'rb') as f:
dis(f, output, memo, args.indentlevel, annotate)
finally:
if output is not sys.stdout:
output.close()
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix resource warnings for unclosed files in :mod:`pickle` and
:mod:`pickletools` command line interfaces.

0 comments on commit bd754b9

Please sign in to comment.