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

diff --git a/Tools/scripts/fixheader.py b/Tools/scripts/fixheader.py
index ec84057..c834eec 100755
--- a/Tools/scripts/fixheader.py
+++ b/Tools/scripts/fixheader.py
@@ -15,8 +15,8 @@
     except IOError as msg:
         sys.stderr.write('%s: can\'t open: %s\n' % (filename, str(msg)))
         return
-    data = f.read()
-    f.close()
+    with f:
+        data = f.read()
     if data[:2] != '/*':
         sys.stderr.write('%s does not begin with C comment\n' % filename)
         return
@@ -25,25 +25,25 @@
     except IOError as msg:
         sys.stderr.write('%s: can\'t write: %s\n' % (filename, str(msg)))
         return
-    sys.stderr.write('Processing %s ...\n' % filename)
-    magic = 'Py_'
-    for c in filename:
-        if ord(c)<=0x80 and c.isalnum():
-            magic = magic + c.upper()
-        else: magic = magic + '_'
-    sys.stdout = f
-    print('#ifndef', magic)
-    print('#define', magic)
-    print('#ifdef __cplusplus')
-    print('extern "C" {')
-    print('#endif')
-    print()
-    f.write(data)
-    print()
-    print('#ifdef __cplusplus')
-    print('}')
-    print('#endif')
-    print('#endif /*', '!'+magic, '*/')
+    with f:
+        sys.stderr.write('Processing %s ...\n' % filename)
+        magic = 'Py_'
+        for c in filename:
+            if ord(c)<=0x80 and c.isalnum():
+                magic = magic + c.upper()
+            else: magic = magic + '_'
+        print('#ifndef', magic, file=f)
+        print('#define', magic, file=f)
+        print('#ifdef __cplusplus', file=f)
+        print('extern "C" {', file=f)
+        print('#endif', file=f)
+        print(file=f)
+        f.write(data)
+        print(file=f)
+        print('#ifdef __cplusplus', file=f)
+        print('}', file=f)
+        print('#endif', file=f)
+        print('#endif /*', '!'+magic, '*/', file=f)
 
 if __name__ == '__main__':
     main()