bpo-41138: Fix trace CLI for non-UTF-8 files. (GH-21177)


Fix also a resource warning when store counts and module info.
(cherry picked from commit 04cdeb7a5617c48102f45b965e683b12cdf934f8)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
diff --git a/Lib/trace.py b/Lib/trace.py
index 52047c3..c505d8b 100755
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -287,8 +287,9 @@
         if self.outfile:
             # try and store counts and module info into self.outfile
             try:
-                pickle.dump((self.counts, self.calledfuncs, self.callers),
-                            open(self.outfile, 'wb'), 1)
+                with open(self.outfile, 'wb') as f:
+                    pickle.dump((self.counts, self.calledfuncs, self.callers),
+                                f, 1)
             except OSError as err:
                 print("Can't save counts files because %s" % err, file=sys.stderr)
 
@@ -715,7 +716,7 @@
             sys.argv = [opts.progname, *opts.arguments]
             sys.path[0] = os.path.dirname(opts.progname)
 
-            with open(opts.progname) as fp:
+            with open(opts.progname, 'rb') as fp:
                 code = compile(fp.read(), opts.progname, 'exec')
             # try to emulate __main__ namespace as much as possible
             globs = {