diff --git a/site_utils/suite_preprocessor.py b/site_utils/suite_preprocessor.py
index 99e78ca..3f0452d 100755
--- a/site_utils/suite_preprocessor.py
+++ b/site_utils/suite_preprocessor.py
@@ -8,6 +8,9 @@
 Deprecated tool for preprocessing tests to determine their DEPENDENCIES.
 """
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
 import optparse, os, sys
 import common
 
@@ -42,7 +45,7 @@
         with open(options.output_file, 'w') as file_obj:
             file_obj.write('%r' % test_deps)
     else:
-        print '%r' % test_deps
+        print('%r' % test_deps)
 
 
 if __name__ == "__main__":
diff --git a/site_utils/sync_cloudsql_access.py b/site_utils/sync_cloudsql_access.py
index 2254ae9..3abb94b 100755
--- a/site_utils/sync_cloudsql_access.py
+++ b/site_utils/sync_cloudsql_access.py
@@ -22,6 +22,10 @@
 
 """
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import argparse
 import socket
 import sys
@@ -89,9 +93,9 @@
             'CLOUD', 'tko_access_servers', default='')
     if tko_servers:
         servers.extend(tko_servers.split(','))
-    print 'Adding servers %s to access list for projects %s' % (servers,
-                                                                instance)
-    print 'Fetching their IP addresses...'
+    print('Adding servers %s to access list for projects %s' % (servers,
+                                                                instance))
+    print('Fetching their IP addresses...')
     ips = []
     for name in servers:
         try:
@@ -100,18 +104,18 @@
             # collect external ips
             ips.append(_fetch_external_ip(name))
         except socket.gaierror:
-            print 'Failed to resolve internal IP address for name %s' % name
+            print('Failed to resolve internal IP address for name %s' % name)
             raise
         except error.TimeoutException:
-            print 'Failed to resolve external IP address for %s' % name
+            print('Failed to resolve external IP address for %s' % name)
             raise
 
-    print '...Done: %s' % ips
+    print('...Done: %s' % ips)
 
     cidr_ips = [str(ip) + '/32' for ip in ips]
 
     if dryrun:
-        print 'This is a dryrun: skip updating glcoud sql allowlists.'
+        print('This is a dryrun: skip updating glcoud sql allowlists.')
         return
 
     login = False
@@ -120,7 +124,7 @@
             utils.run('gcloud config set project %s -q' % project)
             cmd = ('gcloud sql instances patch %s --authorized-networks %s '
                    '-q' % (instance, ','.join(cidr_ips)))
-            print 'Running command to update allowlists: "%s"' % cmd
+            print('Running command to update allowlists: "%s"' % cmd)
             utils.run(cmd, stdout_tee=sys.stdout, stderr_tee=sys.stderr)
             return
         except error.CmdError:
diff --git a/site_utils/test_push.py b/site_utils/test_push.py
index f1f1fb6..e19f739 100755
--- a/site_utils/test_push.py
+++ b/site_utils/test_push.py
@@ -18,6 +18,10 @@
 
 """
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import argparse
 import ast
 import datetime
@@ -29,7 +33,7 @@
 import sys
 import time
 import traceback
-import urllib2
+from six.moves import urllib
 
 import common
 try:
@@ -108,7 +112,7 @@
     @param pool: the pool used by test_push.
     @raise TestPushException: if number of DUTs are less than the requirement.
     """
-    print 'Checking DUT inventory...'
+    print('Checking DUT inventory...')
     pool_label = constants.Labels.POOL_PREFIX + pool
     hosts = AFE.run('get_hosts', status='Ready', locked=False)
     hosts = [h for h in hosts if pool_label in h.get('labels', [])]
@@ -154,7 +158,7 @@
 
 def reverify_all_push_duts():
     """Reverify all the push DUTs."""
-    print 'Reverifying all DUTs.'
+    print('Reverifying all DUTs.')
     hosts = [h.hostname for h in AFE.get_hosts()]
     AFE.reverify_hosts(hostnames=hosts)
 
@@ -270,7 +274,7 @@
         # Break when run_suite process completed.
         if not line and proc.poll() != None:
             break
-        print line.rstrip()
+        print(line.rstrip())
         _run_suite_output.append(line.rstrip())
 
         if not suite_job_id:
@@ -295,7 +299,7 @@
                         'flag has timed out after %d mins. Aborting it.' %
                         arguments.timeout_min)
 
-    print 'Suite job %s is completed.' % suite_job_id
+    print('Suite job %s is completed.' % suite_job_id)
     return suite_job_id
 
 
@@ -306,7 +310,7 @@
     @param suite_job_id: job ID of the suite job.
     @raise TestPushException: If a DUT does not have expected build imaged.
     """
-    print 'Checking image installed in DUTs...'
+    print('Checking image installed in DUTs...')
     job_ids = [job.id for job in
                models.Job.objects.filter(parent_job_id=suite_job_id)]
     hqes = [models.HostQueueEntry.objects.filter(job_id=job_id)[0]
@@ -352,7 +356,7 @@
     @param expected_results: A dictionary of test name to test result.
     @raise TestPushException: If verify fails.
     """
-    print 'Comparing test results...'
+    print('Comparing test results...')
     test_views = site_utils.get_test_views_from_tko(job_id, TKO)
     summary = test_push_common.summarize_push(test_views, expected_results,
                                               _IGNORED_TESTS)
@@ -361,8 +365,8 @@
     job_name = '%s-%s' % (job_id, getpass.getuser())
     log_link = URL_PATTERN % (rpc_client_lib.add_protocol(URL_HOST), job_name)
     try:
-        urllib2.urlopen(log_link).read()
-    except urllib2.URLError:
+        urllib.request.urlopen(log_link).read()
+    except urllib.error.URLError:
         summary.append('Failed to load page for link to log: %s.' % log_link)
 
     if summary:
@@ -400,7 +404,7 @@
         return
     exc_info = queue.get()
     # Raise the exception with original backtrace.
-    print 'Original stack trace of the exception:\n%s' % exc_info[2]
+    print('Original stack trace of the exception:\n%s' % exc_info[2])
     raise exc_info[0](exc_info[1])
 
 
@@ -504,7 +508,7 @@
         check_dut_inventory(arguments.num_duts, arguments.pool)
         _run_test_suites(arguments)
         check_service_crash(arguments.service_respawn_limit, start_time)
-        print _SUCCESS_MSG
+        print(_SUCCESS_MSG)
     except Exception:
         # Abort running jobs unless flagged to continue when there is a failure.
         if not arguments.continue_on_failure:
diff --git a/site_utils/test_push_common.py b/site_utils/test_push_common.py
index f22614c..715aa6b 100644
--- a/site_utils/test_push_common.py
+++ b/site_utils/test_push_common.py
@@ -1,3 +1,4 @@
+# Lint as: python2, python3
 # Copyright 2018 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.
@@ -8,8 +9,12 @@
 skylab: venv/skylab_staging/test_push.py
 """
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
 import collections
 import re
+import six
 
 # Dictionary of test results keyed by test name regular expression.
 EXPECTED_TEST_RESULTS = {'^SERVER_JOB$':                 ['GOOD'],
@@ -74,7 +79,7 @@
     mismatch_errors = []
     unknown_tests = []
     found_keys = set()
-    for test_name, test_status_list in test_views.iteritems():
+    for test_name, test_status_list in six.iteritems(test_views):
         test_found = False
         for test_name_pattern, expected_result in expected_results.items():
             if re.search(test_name_pattern, test_name):
diff --git a/site_utils/test_push_unittest.py b/site_utils/test_push_unittest.py
index 32f353f..fbc3d31 100755
--- a/site_utils/test_push_unittest.py
+++ b/site_utils/test_push_unittest.py
@@ -3,10 +3,10 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import StringIO
+import six
 import mox
 import unittest
-import urllib2
+from six.moves import urllib
 
 import mock
 
@@ -47,9 +47,9 @@
 
         """
         self.mox.UnsetStubs()
-        response = StringIO.StringIO('some_value')
-        self.mox.StubOutWithMock(urllib2, 'urlopen')
-        urllib2.urlopen(mox.IgnoreArg()).AndReturn(response)
+        response = six.StringIO('some_value')
+        self.mox.StubOutWithMock(urllib.request, 'urlopen')
+        urllib.request.urlopen(mox.IgnoreArg()).AndReturn(response)
 
         self.mox.StubOutWithMock(test_push, 'check_dut_image')
         test_push.check_dut_image(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
diff --git a/site_utils/test_runner_utils.py b/site_utils/test_runner_utils.py
index 802cde6..7d6f2d8 100755
--- a/site_utils/test_runner_utils.py
+++ b/site_utils/test_runner_utils.py
@@ -1,7 +1,12 @@
+# Lint as: python2, python3
 # Copyright 2015 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import errno
 import os
 import re
@@ -31,6 +36,7 @@
 from autotest_lib.server import server_logging_config
 from autotest_lib.server import utils
 from autotest_lib.utils import labellib
+from six.moves import range
 
 
 _autoserv_proc = None
@@ -463,7 +469,7 @@
     @param ssh_private_key: Path to the ssh private key to use for testing.
     """
     # Add the testing key to the current ssh agent.
-    if os.environ.has_key('SSH_AGENT_PID'):
+    if 'SSH_AGENT_PID' in os.environ:
         # Copy the testing key to the temp directory and make it NOT
         # world-readable. Otherwise, ssh-add complains.
         shutil.copy(ssh_private_key, temp_directory)
diff --git a/site_utils/test_runner_utils_unittest.py b/site_utils/test_runner_utils_unittest.py
index 6f75fe8..2c87bad 100755
--- a/site_utils/test_runner_utils_unittest.py
+++ b/site_utils/test_runner_utils_unittest.py
@@ -4,6 +4,9 @@
 # found in the LICENSE file.
 # pylint: disable-msg=C0111
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
 import os, unittest
 import mox
 import common
@@ -15,6 +18,8 @@
 from autotest_lib.server.cros.dynamic_suite import suite as suite_module
 from autotest_lib.server.hosts import host_info
 from autotest_lib.site_utils import test_runner_utils
+from six.moves import range
+from six.moves import zip
 
 
 class StartsWithList(mox.Comparator):
@@ -47,7 +52,7 @@
         if len(rhs)<n:
             return False
         return any((self._sublist == rhs[i:i+n])
-                   for i in xrange(len(rhs) - n + 1))
+                   for i in range(len(rhs) - n + 1))
 
 class DummyJob(object):
     def __init__(self, id=1):
diff --git a/site_utils/test_that.py b/site_utils/test_that.py
index 7a2e6a6..64a01a3 100755
--- a/site_utils/test_that.py
+++ b/site_utils/test_that.py
@@ -3,6 +3,10 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import argparse
 import os
 import signal
@@ -253,7 +257,7 @@
     @param arguments: Parsed command line arguments.
     """
     if not os.path.exists('/etc/cros_chroot_version'):
-        print >> sys.stderr, 'For local runs, script must be run inside chroot.'
+        print('For local runs, script must be run inside chroot.', file=sys.stderr)
         return 1
 
     results_directory = test_runner_utils.create_results_directory(
@@ -281,8 +285,8 @@
         sysroot_path = os.path.join('/build', arguments.board, '')
 
         if not os.path.exists(sysroot_path):
-            print >> sys.stderr, ('%s does not exist. Have you run '
-                                  'setup_board?' % sysroot_path)
+            print(('%s does not exist. Have you run '
+                   'setup_board?' % sysroot_path), file=sys.stderr)
             return 1
 
         path_ending = 'usr/local/build/autotest'
@@ -291,10 +295,10 @@
     site_utils_path = os.path.join(autotest_path, 'site_utils')
 
     if not os.path.exists(autotest_path):
-        print >> sys.stderr, ('%s does not exist. Have you run '
-                              'build_packages? Or if you are using '
-                              '--autotest_dir, make sure it points to '
-                              'a valid autotest directory.' % autotest_path)
+        print(('%s does not exist. Have you run '
+               'build_packages? Or if you are using '
+               '--autotest_dir, make sure it points to '
+               'a valid autotest directory.' % autotest_path), file=sys.stderr)
         return 1
 
     realpath = os.path.realpath(__file__)
@@ -378,7 +382,7 @@
     try:
         validate_arguments(arguments)
     except ValueError as err:
-        print >> sys.stderr, ('Invalid arguments. %s' % err.message)
+        print(('Invalid arguments. %s' % str(err)), file=sys.stderr)
         return 1
 
     if arguments.remote == ':lab:':
