diff --git a/site_utils/log_socket_server.py b/site_utils/log_socket_server.py
index 9de8080..ac948ae 100644
--- a/site_utils/log_socket_server.py
+++ b/site_utils/log_socket_server.py
@@ -1,3 +1,4 @@
+# Lint as: python2, python3
 # The source code is from following Python documentation:
 # https://docs.python.org/2/howto/logging-cookbook.html#network-logging
 
@@ -10,19 +11,23 @@
 #         logging.handlers.DEFAULT_TCP_LOGGING_PORT)
 # logging.getLogger().addHandler(socketHandler)
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import ctypes
 import pickle
 import logging
 import multiprocessing
 import select
-import SocketServer
+import six.moves.socketserver
 import struct
 import time
 
 import common
 from autotest_lib.client.common_lib import utils
 
-class LogRecordStreamHandler(SocketServer.StreamRequestHandler):
+class LogRecordStreamHandler(six.moves.socketserver.StreamRequestHandler):
     """Handler for a streaming logging request.
 
     This basically logs the record using whatever logging policy is
@@ -76,7 +81,7 @@
         logger.handle(record)
 
 
-class LogRecordSocketReceiver(SocketServer.ThreadingTCPServer):
+class LogRecordSocketReceiver(six.moves.socketserver.ThreadingTCPServer):
     """Simple TCP socket-based logging receiver.
     """
 
@@ -86,7 +91,7 @@
                  handler=LogRecordStreamHandler):
         if not port:
             port = utils.get_unused_port()
-        SocketServer.ThreadingTCPServer.__init__(self, (host, port), handler)
+        six.moves.socketserver.ThreadingTCPServer.__init__(self, (host, port), handler)
         self.abort = 0
         self.timeout = 1
         self.logname = None
@@ -95,7 +100,7 @@
 
     def serve_until_stopped(self):
         """Run the socket receiver until aborted."""
-        print 'Log Record Socket Receiver is started.'
+        print('Log Record Socket Receiver is started.')
         abort = 0
         while not abort:
             rd, wr, ex = select.select([self.socket.fileno()], [], [],
@@ -103,7 +108,7 @@
             if rd:
                 self.handle_request()
             abort = self.abort
-        print 'Log Record Socket Receiver is stopped.'
+        print('Log Record Socket Receiver is stopped.')
 
 
 class LogSocketServer:
@@ -132,7 +137,7 @@
         while not server_started.value:
             time.sleep(0.1)
         LogSocketServer.port = port.value
-        print 'Log Record Socket Server is started at port %d.' % port.value
+        print('Log Record Socket Server is started at port %d.' % port.value)
 
 
     @staticmethod
diff --git a/site_utils/log_socket_server_unittest.py b/site_utils/log_socket_server_unittest.py
index 58c9403..a289670 100644
--- a/site_utils/log_socket_server_unittest.py
+++ b/site_utils/log_socket_server_unittest.py
@@ -1,7 +1,12 @@
+# Lint as: python2, python3
 # Copyright (c) 2014 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 logging
 import logging.handlers
 import mox
@@ -11,7 +16,8 @@
 import os
 import unittest
 
-import log_socket_server
+from autotest_lib.site_utils import log_socket_server
+from six.moves import range
 
 
 class TestLogSocketServer(mox.MoxTestBase):
diff --git a/site_utils/perf_compare.py b/site_utils/perf_compare.py
index b303413..0318d25 100644
--- a/site_utils/perf_compare.py
+++ b/site_utils/perf_compare.py
@@ -58,6 +58,9 @@
 """
 
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
 import json
 import logging
 import math
@@ -67,6 +70,7 @@
 import shutil
 import subprocess
 import sys
+from six.moves import input
 
 
 _ITERATIONS = 5
@@ -150,7 +154,7 @@
                         else benchmark_to_add['iterations'])
                 else:
                     benchmark_to_add['iterations'] = iter_num
-        benchmarks_to_run = identified_benchmarks.values()
+        benchmarks_to_run = list(identified_benchmarks.values())
 
     return benchmarks_to_run, perf_keys_requested
 
diff --git a/site_utils/rpc_flight_recorder.py b/site_utils/rpc_flight_recorder.py
index 7462f5b..f86f980 100755
--- a/site_utils/rpc_flight_recorder.py
+++ b/site_utils/rpc_flight_recorder.py
@@ -10,7 +10,7 @@
 import time
 import logging
 import multiprocessing
-import urllib2
+from six.moves import urllib
 
 import common
 from autotest_lib.client.common_lib import global_config
@@ -224,7 +224,7 @@
                 if expected is not None and expected != result:
                     _failed(f, msg_str, 'IncorrectResponse')
 
-            except urllib2.HTTPError as e:
+            except urllib.error.HTTPError as e:
                 _failed(f, msg_str, 'HTTPError:%d' % e.code)
 
             except Exception as e:
diff --git a/site_utils/rpc_logserver.py b/site_utils/rpc_logserver.py
index ce7518e..4e225aa 100755
--- a/site_utils/rpc_logserver.py
+++ b/site_utils/rpc_logserver.py
@@ -5,6 +5,10 @@
 # found in the LICENSE file.
 
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import argparse
 import ctypes
 import logging
@@ -51,7 +55,7 @@
         LogServer.process.start()
         while not server_started.value:
             time.sleep(0.1)
-        print 'LogServer is started at port %d.' % port
+        print('LogServer is started at port %d.' % port)
 
 
     @staticmethod
diff --git a/site_utils/server_manager.py b/site_utils/server_manager.py
index 5a7d183..90c8430 100644
--- a/site_utils/server_manager.py
+++ b/site_utils/server_manager.py
@@ -1,3 +1,4 @@
+# Lint as: python2, python3
 # Copyright 2014 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.
@@ -30,6 +31,10 @@
 """
 
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import datetime
 
 import common
@@ -74,7 +79,7 @@
     server_manager_actions.try_execute(server, [role], enable=True,
                                        post_change=True, do_action=action)
 
-    print 'Role %s is added to server %s.' % (role, server.hostname)
+    print('Role %s is added to server %s.' % (role, server.hostname))
 
 
 def _delete_role(server, role, action=False):
@@ -100,7 +105,7 @@
     server_manager_actions.try_execute(server, [role], enable=False,
                                        post_change=False, do_action=action)
 
-    print 'Deleting role %s from server %s...' % (role, server.hostname)
+    print('Deleting role %s from server %s...' % (role, server.hostname))
     server.roles.get(role=role).delete()
 
     # Apply actions to disable the role for the server after the role is
@@ -112,7 +117,7 @@
         server.status == server_models.Server.STATUS.PRIMARY):
         print ('Server %s has no role.')
 
-    print 'Role %s is deleted from server %s.' % (role, server.hostname)
+    print('Role %s is deleted from server %s.' % (role, server.hostname))
 
 
 def _change_status(server, status, action):
@@ -175,9 +180,9 @@
                                        prev_status=prev_status,
                                        do_action=action)
 
-    print ('Status of server %s is changed from %s to %s. Affected roles: %s' %
-           (server.hostname, prev_status, status,
-            ', '.join(server.get_role_names())))
+    print('Status of server %s is changed from %s to %s. Affected roles: %s' %
+          (server.hostname, prev_status, status,
+           ', '.join(server.get_role_names())))
 
 
 @server_manager_utils.verify_server(exist=False)
@@ -211,17 +216,17 @@
     @raise ServerActionError: If delete server action failed, e.g., server is
             not found in database.
     """
-    print 'Deleting server %s from server database.' % hostname
+    print('Deleting server %s from server database.' % hostname)
 
     if (server_manager_utils.use_server_db() and
         server.status == server_models.Server.STATUS.PRIMARY):
-        print ('Server %s is in status primary, need to disable its '
-               'current roles first.' % hostname)
+        print('Server %s is in status primary, need to disable its '
+              'current roles first.' % hostname)
         for role in server.roles.all():
             _delete_role(server, role.role)
 
     server.delete()
-    print 'Server %s is deleted from server database.' % hostname
+    print('Server %s is deleted from server database.' % hostname)
 
 
 @server_manager_utils.verify_server()
