diff --git a/tools/archive.py b/tools/archive.py
index 24e8e0a..f7fe808 100755
--- a/tools/archive.py
+++ b/tools/archive.py
@@ -37,7 +37,7 @@
   # TODO(mkroghj) This would not work for r8-lib, maybe use utils.getR8Version.
   output = subprocess.check_output([
     jdk.GetJavaExecutable(), '-jar', jar_path, '--version'
-  ])
+  ]).decode('utf-8')
   return output.splitlines()[0].strip()
 
 def GetVersion():
@@ -54,11 +54,11 @@
   return subprocess.check_output(['git', 'show', '-s', '--pretty=%d', 'HEAD'])
 
 def GetGitHash():
-  return subprocess.check_output(['git', 'rev-parse', 'HEAD']).strip()
+  return subprocess.check_output(['git', 'rev-parse', 'HEAD']).decode('utf-8').strip()
 
 def IsMain(version):
   branches = subprocess.check_output(['git', 'branch', '-r', '--contains',
-                                      'HEAD'])
+                                      'HEAD']).decode('utf-8')
   # CL runs from gerrit does not have a branch, we always treat them as main
   # commits to archive these to the hash based location
   if len(branches) == 0:
diff --git a/tools/gradle.py b/tools/gradle.py
index 63c92b5..89b1c0e 100755
--- a/tools/gradle.py
+++ b/tools/gradle.py
@@ -96,7 +96,7 @@
   cmd.extend(args)
   utils.PrintCmd(cmd)
   with utils.ChangedWorkingDirectory(cwd):
-    return subprocess.check_output(cmd, env=GetJavaEnv(env))
+    return subprocess.check_output(cmd, env=GetJavaEnv(env)).decode('utf-8')
 
 def RunGradleWrapperInGetOutput(args, cwd, env=None):
   return RunGradleInGetOutput('./gradlew', args, cwd, env=env)
diff --git a/tools/internal_test.py b/tools/internal_test.py
index 47d236e..0237bd0 100755
--- a/tools/internal_test.py
+++ b/tools/internal_test.py
@@ -167,7 +167,7 @@
 
 def ensure_git_clean():
   # Ensure clean git repo.
-  diff = subprocess.check_output(['git', 'diff'])
+  diff = subprocess.check_output(['git', 'diff']).decode('utf-8')
   if len(diff) > 0:
     log('Local modifications to the git repo, exiting')
     sys.exit(1)
diff --git a/tools/utils.py b/tools/utils.py
index 5d574ac..c40a4c0 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -133,7 +133,7 @@
       'show',
       tag_or_hash,
       '-s',
-      '--format=oneline']).splitlines()[-1].split()
+      '--format=oneline']).decode('utf-8').splitlines()[-1].split()
   # The info should be on the following form [hash,"Version",version]
   if len(info) == 3 and len(info[0]) == 40 and info[1] == "Version":
     return info[2]
@@ -301,7 +301,7 @@
 
 def is_main():
   remotes = subprocess.check_output(['git', 'branch', '-r', '--contains',
-                                     'HEAD'])
+                                     'HEAD']).decode('utf-8')
   return 'origin/main' in remotes
 
 def get_HEAD_sha1():
@@ -350,7 +350,7 @@
 def ls_files_on_cloud_storage(destination):
   cmd = [get_gsutil(), 'ls', destination]
   PrintCmd(cmd)
-  return subprocess.check_output(cmd)
+  return subprocess.check_output(cmd).decode('utf-8')
 
 def cat_file_on_cloud_storage(destination, ignore_errors=False):
   cmd = [get_gsutil(), 'cat', destination]
@@ -524,7 +524,7 @@
          'com.android.tools.r8.cf_segments.MeasureLib',
          cfFile]
   PrintCmd(cmd)
-  output = subprocess.check_output(cmd)
+  output = subprocess.check_output(cmd).decode('utf-8')
 
   matches = DEX_SEGMENTS_RESULT_PATTERN.findall(output)
 
@@ -556,8 +556,8 @@
 # Ensure that we are not benchmarking with a google jvm.
 def check_java_version():
   cmd= [jdk.GetJavaExecutable(), '-version']
-  output = subprocess.check_output(cmd, stderr = subprocess.STDOUT)
-  m = re.search('openjdk version "([^"]*)"', output.decode('utf-8'))
+  output = subprocess.check_output(cmd, stderr = subprocess.STDOUT).decode('utf-8')
+  m = re.search('openjdk version "([^"]*)"', output)
   if m is None:
     raise Exception("Can't check java version: no version string in output"
         " of 'java -version': '{}'".format(output))
@@ -593,7 +593,7 @@
 def getR8Version(path):
   cmd = [jdk.GetJavaExecutable(), '-cp', path, 'com.android.tools.r8.R8',
         '--version']
-  output = subprocess.check_output(cmd, stderr = subprocess.STDOUT)
+  output = subprocess.check_output(cmd, stderr = subprocess.STDOUT).decode('utf-8')
   # output is of the form 'R8 <version> (with additional info)'
   # so we split on '('; clean up tailing spaces; and strip off 'R8 '.
   return output.split('(')[0].strip()[3:]
