mirror of https://github.com/python/cpython
gh-85567: Fix resouce warnings in pickle and pickletools CLIs (GH-113618)
Explicitly open and close files instead of using FileType.
This commit is contained in:
parent
3c4e972d6d
commit
bd754b93ca
|
@ -1793,7 +1793,7 @@ if __name__ == "__main__":
|
|||
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',
|
||||
|
@ -1809,6 +1809,10 @@ if __name__ == "__main__":
|
|||
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)
|
||||
|
|
|
@ -2848,10 +2848,10 @@ if __name__ == "__main__":
|
|||
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',
|
||||
|
@ -2876,15 +2876,26 @@ if __name__ == "__main__":
|
|||
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()
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix resource warnings for unclosed files in :mod:`pickle` and
|
||||
:mod:`pickletools` command line interfaces.
|
Loading…
Reference in New Issue