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

diff --git a/Tools/demo/markov.py b/Tools/demo/markov.py
index 7a0720f..9729f38 100755
--- a/Tools/demo/markov.py
+++ b/Tools/demo/markov.py
@@ -78,9 +78,9 @@
                     continue
             else:
                 f = open(filename, 'r')
-            if debug: print('processing', filename, '...')
-            text = f.read()
-            f.close()
+            with f:
+                if debug: print('processing', filename, '...')
+                text = f.read()
             paralist = text.split('\n\n')
             for para in paralist:
                 if debug > 1: print('feeding ...')
diff --git a/Tools/demo/rpython.py b/Tools/demo/rpython.py
index 5e7bc0a..8d7e274 100755
--- a/Tools/demo/rpython.py
+++ b/Tools/demo/rpython.py
@@ -22,17 +22,16 @@
         port = int(port[i+1:])
         host = host[:i]
     command = ' '.join(sys.argv[2:])
-    s = socket(AF_INET, SOCK_STREAM)
-    s.connect((host, port))
-    s.send(command.encode())
-    s.shutdown(SHUT_WR)
-    reply = b''
-    while True:
-        data = s.recv(BUFSIZE)
-        if not data:
-            break
-        reply += data
-    print(reply.decode(), end=' ')
-    s.close()
+    with socket(AF_INET, SOCK_STREAM) as s:
+        s.connect((host, port))
+        s.send(command.encode())
+        s.shutdown(SHUT_WR)
+        reply = b''
+        while True:
+            data = s.recv(BUFSIZE)
+            if not data:
+                break
+            reply += data
+        print(reply.decode(), end=' ')
 
 main()
diff --git a/Tools/demo/rpythond.py b/Tools/demo/rpythond.py
index 9ffe13a..a885b3e 100755
--- a/Tools/demo/rpythond.py
+++ b/Tools/demo/rpythond.py
@@ -26,16 +26,16 @@
     s.listen(1)
     while True:
         conn, (remotehost, remoteport) = s.accept()
-        print('connection from', remotehost, remoteport)
-        request = b''
-        while 1:
-            data = conn.recv(BUFSIZE)
-            if not data:
-                break
-            request += data
-        reply = execute(request.decode())
-        conn.send(reply.encode())
-        conn.close()
+        with conn:
+            print('connection from', remotehost, remoteport)
+            request = b''
+            while 1:
+                data = conn.recv(BUFSIZE)
+                if not data:
+                    break
+                request += data
+            reply = execute(request.decode())
+            conn.send(reply.encode())
 
 def execute(request):
     stdout = sys.stdout