diff --git a/tools/archive.py b/tools/archive.py
index 6eada3d..d3aa196 100755
--- a/tools/archive.py
+++ b/tools/archive.py
@@ -35,9 +35,9 @@
 
 def GetToolVersion(jar_path):
   # TODO(mkroghj) This would not work for r8-lib, maybe use utils.getR8Version.
-  output = str(subprocess.check_output([
+  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 str(subprocess.check_output(['git', 'rev-parse', 'HEAD'])).strip()
+  return subprocess.check_output(['git', 'rev-parse', 'HEAD']).decode('utf-8').strip()
 
 def IsMain(version):
-  branches = str(subprocess.check_output(['git', 'branch', '-r', '--contains',
-                                      'HEAD']))
+  branches = subprocess.check_output(['git', 'branch', '-r', '--contains',
+                                      '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 bd3aa3c..19fa773 100755
--- a/tools/gradle.py
+++ b/tools/gradle.py
@@ -96,7 +96,7 @@
   cmd.extend(args)
   utils.PrintCmd(cmd)
   with utils.ChangedWorkingDirectory(cwd):
-    return str(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 1ec2a19..0d591ad 100755
--- a/tools/internal_test.py
+++ b/tools/internal_test.py
@@ -166,7 +166,7 @@
 
 def ensure_git_clean():
   # Ensure clean git repo.
-  diff = str(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 79efd9c..d616707 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -137,12 +137,12 @@
     return options.commit_hash or options.version
 
 def find_hash_or_version_from_tag(tag_or_hash):
-  info = str(subprocess.check_output([
+  info = subprocess.check_output([
       'git',
       '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]
@@ -309,8 +309,8 @@
   return sha1.hexdigest()
 
 def is_main():
-  remotes = str(subprocess.check_output(['git', 'branch', '-r', '--contains',
-                                     'HEAD']))
+  remotes = subprocess.check_output(['git', 'branch', '-r', '--contains',
+                                     'HEAD']).decode('utf-8')
   return 'origin/main' in remotes
 
 def get_HEAD_sha1():
@@ -359,7 +359,7 @@
 def ls_files_on_cloud_storage(destination):
   cmd = [get_gsutil(), 'ls', destination]
   PrintCmd(cmd)
-  return str(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]
@@ -535,7 +535,7 @@
          'com.android.tools.r8.cf_segments.MeasureLib',
          cfFile]
   PrintCmd(cmd)
-  output = str(subprocess.check_output(cmd))
+  output = subprocess.check_output(cmd).decode('utf-8')
 
   matches = DEX_SEGMENTS_RESULT_PATTERN.findall(output)
 
@@ -567,8 +567,8 @@
 # Ensure that we are not benchmarking with a google jvm.
 def check_java_version():
   cmd= [jdk.GetJavaExecutable(), '-version']
-  output = str(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))
@@ -604,7 +604,7 @@
 def getR8Version(path):
   cmd = [jdk.GetJavaExecutable(), '-cp', path, 'com.android.tools.r8.R8',
         '--version']
-  output = str(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:]
