bpo-22831: Use "with" to avoid possible fd leaks in tools (part 2). (GH-10927)

diff --git a/Tools/scripts/h2py.py b/Tools/scripts/h2py.py
index 4363c0c..ea37c04 100755
--- a/Tools/scripts/h2py.py
+++ b/Tools/scripts/h2py.py
@@ -69,23 +69,21 @@
             sys.stdout.write('# Generated by h2py from stdin\n')
             process(sys.stdin, sys.stdout)
         else:
-            fp = open(filename, 'r')
-            outfile = os.path.basename(filename)
-            i = outfile.rfind('.')
-            if i > 0: outfile = outfile[:i]
-            modname = outfile.upper()
-            outfile = modname + '.py'
-            outfp = open(outfile, 'w')
-            outfp.write('# Generated by h2py from %s\n' % filename)
-            filedict = {}
-            for dir in searchdirs:
-                if filename[:len(dir)] == dir:
-                    filedict[filename[len(dir)+1:]] = None  # no '/' trailing
-                    importable[filename[len(dir)+1:]] = modname
-                    break
-            process(fp, outfp)
-            outfp.close()
-            fp.close()
+            with open(filename) as fp:
+                outfile = os.path.basename(filename)
+                i = outfile.rfind('.')
+                if i > 0: outfile = outfile[:i]
+                modname = outfile.upper()
+                outfile = modname + '.py'
+                with open(outfile, 'w') as outfp:
+                    outfp.write('# Generated by h2py from %s\n' % filename)
+                    filedict = {}
+                    for dir in searchdirs:
+                        if filename[:len(dir)] == dir:
+                            filedict[filename[len(dir)+1:]] = None  # no '/' trailing
+                            importable[filename[len(dir)+1:]] = modname
+                            break
+                    process(fp, outfp)
 
 def pytify(body):
     # replace ignored patterns by spaces
@@ -161,9 +159,10 @@
                     except IOError:
                         pass
                 if inclfp:
-                    outfp.write(
-                            '\n# Included from %s\n' % filename)
-                    process(inclfp, outfp, env)
+                    with inclfp:
+                        outfp.write(
+                                '\n# Included from %s\n' % filename)
+                        process(inclfp, outfp, env)
                 else:
                     sys.stderr.write('Warning - could not find file %s\n' %
                                      filename)