diff --git a/crypto/hpke/translate_test_vectors.py b/crypto/hpke/translate_test_vectors.py
index 1fa6cbc..edc86c3 100755
--- a/crypto/hpke/translate_test_vectors.py
+++ b/crypto/hpke/translate_test_vectors.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # coding=utf-8
 # Copyright (c) 2020, Google Inc.
 #
diff --git a/util/bot/go/env.py b/util/bot/go/env.py
index 91eace0..b9c33e2 100755
--- a/util/bot/go/env.py
+++ b/util/bot/go/env.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # Copyright 2014 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
diff --git a/util/bot/update_clang.py b/util/bot/update_clang.py
index f959280..5e9c0c2 100644
--- a/util/bot/update_clang.py
+++ b/util/bot/update_clang.py
@@ -1,10 +1,13 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
 """This script is used to download prebuilt clang binaries."""
 
+from __future__ import division
+from __future__ import print_function
+
 import os
 import shutil
 import subprocess
@@ -13,7 +16,13 @@
 import tarfile
 import tempfile
 import time
-import urllib2
+
+try:
+  # Python 3.0 or later
+  from urllib.error import HTTPError, URLError
+  from urllib.request import urlopen
+except ImportError:
+  from urllib2 import urlopen, HTTPError, URLError
 
 
 # CLANG_REVISION and CLANG_SUB_REVISION determine the build of clang
@@ -45,8 +54,8 @@
     try:
       sys.stdout.write('Downloading %s ' % url)
       sys.stdout.flush()
-      response = urllib2.urlopen(url)
-      total_size = int(response.info().getheader('Content-Length').strip())
+      response = urlopen(url)
+      total_size = int(response.headers.get('Content-Length').strip())
       bytes_done = 0
       dots_printed = 0
       while True:
@@ -55,29 +64,28 @@
           break
         output_file.write(chunk)
         bytes_done += len(chunk)
-        num_dots = TOTAL_DOTS * bytes_done / total_size
+        num_dots = TOTAL_DOTS * bytes_done // total_size
         sys.stdout.write('.' * (num_dots - dots_printed))
         sys.stdout.flush()
         dots_printed = num_dots
       if bytes_done != total_size:
-        raise urllib2.URLError("only got %d of %d bytes" %
-                               (bytes_done, total_size))
-      print ' Done.'
+        raise URLError("only got %d of %d bytes" % (bytes_done, total_size))
+      print(' Done.')
       return
-    except urllib2.URLError as e:
+    except URLError as e:
       sys.stdout.write('\n')
-      print e
-      if num_retries == 0 or isinstance(e, urllib2.HTTPError) and e.code == 404:
+      print(e)
+      if num_retries == 0 or isinstance(e, HTTPError) and e.code == 404:
         raise e
       num_retries -= 1
-      print 'Retrying in %d s ...' % retry_wait_s
+      print('Retrying in %d s ...' % retry_wait_s)
       time.sleep(retry_wait_s)
       retry_wait_s *= 2
 
 
 def EnsureDirExists(path):
   if not os.path.exists(path):
-    print "Creating directory %s" % path
+    print("Creating directory %s" % path)
     os.makedirs(path)
 
 
@@ -120,7 +128,7 @@
 
 def CopyFile(src, dst):
   """Copy a file from src to dst."""
-  print "Copying %s to %s" % (src, dst)
+  print("Copying %s to %s" % (src, dst))
   shutil.copy(src, dst)
 
 
@@ -133,32 +141,30 @@
   else:
     return 0
 
-  print 'Updating Clang to %s...' % PACKAGE_VERSION
+  print('Updating Clang to %s...' % PACKAGE_VERSION)
 
   if ReadStampFile() == PACKAGE_VERSION:
-    print 'Clang is already up to date.'
+    print('Clang is already up to date.')
     return 0
 
   # Reset the stamp file in case the build is unsuccessful.
   WriteStampFile('')
 
-  print 'Downloading prebuilt clang'
+  print('Downloading prebuilt clang')
   if os.path.exists(LLVM_BUILD_DIR):
     RmTree(LLVM_BUILD_DIR)
   try:
     DownloadAndUnpack(cds_full_url, LLVM_BUILD_DIR)
-    print 'clang %s unpacked' % PACKAGE_VERSION
+    print('clang %s unpacked' % PACKAGE_VERSION)
     WriteStampFile(PACKAGE_VERSION)
     return 0
-  except urllib2.URLError:
-    print 'Failed to download prebuilt clang %s' % cds_file
-    print 'Exiting.'
+  except URLError:
+    print('Failed to download prebuilt clang %s' % cds_file)
+    print('Exiting.')
     return 1
 
 
 def main():
-  # Don't buffer stdout, so that print statements are immediately flushed.
-  sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
   return UpdateClang()
 
 
diff --git a/util/bot/vs_env.py b/util/bot/vs_env.py
index 13217ca..cbbdd43 100644
--- a/util/bot/vs_env.py
+++ b/util/bot/vs_env.py
@@ -12,13 +12,15 @@
 # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
+from __future__ import print_function
+
 import subprocess
 import sys
 
 import vs_toolchain
 
 if len(sys.argv) < 2:
-  print >>sys.stderr, "Usage: vs_env.py TARGET_ARCH CMD..."
+  print("Usage: vs_env.py TARGET_ARCH CMD...", file=sys.stderr)
   sys.exit(1)
 
 target_arch = sys.argv[1]
diff --git a/util/bot/vs_toolchain.py b/util/bot/vs_toolchain.py
index 954b670..051d78b 100644
--- a/util/bot/vs_toolchain.py
+++ b/util/bot/vs_toolchain.py
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+from __future__ import print_function
+
 import json
 import os
 import os.path
@@ -96,7 +98,7 @@
       'update': Update,
   }
   if len(sys.argv) < 2 or sys.argv[1] not in commands:
-    print >>sys.stderr, 'Expected one of: %s' % ', '.join(commands)
+    print('Expected one of: %s' % ', '.join(commands), file=sys.stderr)
     return 1
   return commands[sys.argv[1]](*sys.argv[2:])
 
