[build] Remove python version detection

When 2.14 hits stable, all branches will have been migrated to python3.

Change-Id: Ic652ef7f1a5d4f879d90ce76426795a8ac9db204
Reviewed-on: https://dart-review.googlesource.com/c/recipes/+/212564
Reviewed-by: William Hesse <whesse@google.com>
Commit-Queue: Alexander Thomas <athom@google.com>
diff --git a/README.recipes.md b/README.recipes.md
index 2aec609..ed7e7f3 100644
--- a/README.recipes.md
+++ b/README.recipes.md
@@ -11,7 +11,6 @@
   * [bisect_build:tests/tests](#recipes-bisect_build_tests_tests)
   * [build:tests/test_build](#recipes-build_tests_test_build)
   * [build:tests/test_gn](#recipes-build_tests_test_gn)
-  * [build:tests/test_python](#recipes-build_tests_test_python)
   * [cron/cron](#recipes-cron_cron)
   * [dart/cbuild](#recipes-dart_cbuild) &mdash; A recipe that processes go/dart-cbuild results.
   * [dart/chocolatey](#recipes-dart_chocolatey)
@@ -52,15 +51,13 @@
 
 Recipe module for building the Dart SDK with and without goma.
 
-&mdash; **def [build](/recipe_modules/build/api.py#18)(self, name='build dart', args=None):**
+&mdash; **def [build](/recipe_modules/build/api.py#17)(self, name='build dart', args=None):**
 
 Builds dart using the specified args
 
-&mdash; **def [gn](/recipe_modules/build/api.py#31)(self, name='gn', args=None):**
+&mdash; **def [gn](/recipe_modules/build/api.py#30)(self, name='gn', args=None):**
 
 Runs gn.py using the specified args
-
-&emsp; **@property**<br>&mdash; **def [python](/recipe_modules/build/api.py#69)(self):**
 ### *recipe_modules* / [dart](/recipe_modules/dart)
 
 [DEPS](/recipe_modules/dart/__init__.py#5): [bisect\_build](#recipe_modules-bisect_build), [build](#recipe_modules-build), [depot\_tools/bot\_update][depot_tools/recipe_modules/bot_update], [depot\_tools/depot\_tools][depot_tools/recipe_modules/depot_tools], [depot\_tools/gclient][depot_tools/recipe_modules/gclient], [depot\_tools/git][depot_tools/recipe_modules/git], [depot\_tools/gsutil][depot_tools/recipe_modules/gsutil], [depot\_tools/tryserver][depot_tools/recipe_modules/tryserver], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/cipd][recipe_engine/recipe_modules/cipd], [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/isolated][recipe_engine/recipe_modules/isolated], [recipe\_engine/json][recipe_engine/recipe_modules/json], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/runtime][recipe_engine/recipe_modules/runtime], [recipe\_engine/service\_account][recipe_engine/recipe_modules/service_account], [recipe\_engine/step][recipe_engine/recipe_modules/step], [recipe\_engine/swarming][recipe_engine/recipe_modules/swarming]
@@ -91,7 +88,7 @@
 
 Decrypts the specified secret and returns the location of the result
 
-&mdash; **def [has\_infra\_failure](/recipe_modules/dart/api.py#1264)(self, failure):**
+&mdash; **def [has\_infra\_failure](/recipe_modules/dart/api.py#1263)(self, failure):**
 
 Returns whether failure is an aggregated failure that directly or
 indirectly contains an InfraFailure.
@@ -134,11 +131,6 @@
 [DEPS](/recipe_modules/build/tests/test_gn.py#9): [build](#recipe_modules-build), [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step]
 
 &mdash; **def [RunSteps](/recipe_modules/build/tests/test_gn.py#16)(api):**
-### *recipes* / [build:tests/test\_python](/recipe_modules/build/tests/test_python.py)
-
-[DEPS](/recipe_modules/build/tests/test_python.py#9): [build](#recipe_modules-build), [recipe\_engine/file][recipe_engine/recipe_modules/file], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/step][recipe_engine/recipe_modules/step]
-
-&mdash; **def [RunSteps](/recipe_modules/build/tests/test_python.py#17)(api):**
 ### *recipes* / [cron/cron](/recipes/cron/cron.py)
 
 [DEPS](/recipes/cron/cron.py#21): [depot\_tools/gitiles][depot_tools/recipe_modules/gitiles], [recipe\_engine/buildbucket][recipe_engine/recipe_modules/buildbucket], [recipe\_engine/properties][recipe_engine/recipe_modules/properties]
diff --git a/recipe_modules/build/api.py b/recipe_modules/build/api.py
index 1521be1..6a5004f 100644
--- a/recipe_modules/build/api.py
+++ b/recipe_modules/build/api.py
@@ -13,7 +13,6 @@
     # No need to download goma if it's disabled.
     self._goma_ensured = properties.disable_goma
     self._timeout = properties.timeout or 50 * 60  # 50 minutes
-    self._python = None
 
   def build(self, name='build dart', args=None):
     """Builds dart using the specified args"""
@@ -35,13 +34,13 @@
       if not self._goma and '--no-goma' not in args:
         args = args + ['--no-goma']
       gn_py = self.m.path['checkout'].join('tools', 'gn.py')
-      self.m.step(name, [self.python, '-u', gn_py] + args)
+      self.m.step(name, ['python3', '-u', gn_py] + args)
 
   def _run_build_py(self, name, args):
     with self.m.context(infra_steps=False):
       build_py = self.m.path['checkout'].join('tools', 'build.py')
       self.m.step(
-          name, [self.python, '-u', build_py] + args, timeout=self._timeout)
+          name, ['python3', '-u', build_py] + args, timeout=self._timeout)
 
   def _build_with_goma(self, name, args):
     self._ensure_goma()
@@ -65,17 +64,3 @@
   @property
   def _build_env(self):
     return {'GOMA_DIR': self.m.goma.goma_dir} if self._goma else {}
-
-  @property
-  def python(self):
-    if self._python:
-      return self._python
-    # TODO(athom): remove after python3 migration is complete.
-    build_py = self.m.path['checkout'].join('tools', 'build.py')
-    is_python3 = self.m.file.read_text(
-        'detect python version', build_py).startswith('#!/usr/bin/env python3')
-    detected_python = 'python3' if is_python3 else 'python'
-    python = self.m.properties.get('python_version', detected_python)
-    assert (python in ['python', 'python3'])
-    self._python = python
-    return self._python
diff --git a/recipe_modules/build/tests/test_build.expected/custom-timeout.json b/recipe_modules/build/tests/test_build.expected/custom-timeout.json
index 20a4229..d61d45f 100644
--- a/recipe_modules/build/tests/test_build.expected/custom-timeout.json
+++ b/recipe_modules/build/tests/test_build.expected/custom-timeout.json
@@ -1,7 +1,7 @@
 [
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "None/tools/build.py",
       "--super-fast",
diff --git a/recipe_modules/build/tests/test_build.expected/fail.json b/recipe_modules/build/tests/test_build.expected/fail.json
index ce6e6d7..561bec8 100644
--- a/recipe_modules/build/tests/test_build.expected/fail.json
+++ b/recipe_modules/build/tests/test_build.expected/fail.json
@@ -192,36 +192,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "cwd": "None",
-    "env": {
-      "GOMA_DIR": "[CACHE]/goma/client"
-    },
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "None/tools/build.py",
       "--super-fast",
diff --git a/recipe_modules/build/tests/test_build.expected/no-goma.json b/recipe_modules/build/tests/test_build.expected/no-goma.json
index 2134586..fe9eaeb 100644
--- a/recipe_modules/build/tests/test_build.expected/no-goma.json
+++ b/recipe_modules/build/tests/test_build.expected/no-goma.json
@@ -1,33 +1,7 @@
 [
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "cwd": "None",
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "None/tools/build.py",
       "--super-fast",
diff --git a/recipe_modules/build/tests/test_build.expected/success.json b/recipe_modules/build/tests/test_build.expected/success.json
index ee3fe7a..4ebbe75 100644
--- a/recipe_modules/build/tests/test_build.expected/success.json
+++ b/recipe_modules/build/tests/test_build.expected/success.json
@@ -192,36 +192,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "cwd": "None",
-    "env": {
-      "GOMA_DIR": "[CACHE]/goma/client"
-    },
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "None/tools/build.py",
       "--super-fast",
diff --git a/recipe_modules/build/tests/test_build.expected/timeout.json b/recipe_modules/build/tests/test_build.expected/timeout.json
index de2bcab..5d7c3b1 100644
--- a/recipe_modules/build/tests/test_build.expected/timeout.json
+++ b/recipe_modules/build/tests/test_build.expected/timeout.json
@@ -192,36 +192,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "cwd": "None",
-    "env": {
-      "GOMA_DIR": "[CACHE]/goma/client"
-    },
-    "env_suffixes": {
-      "DEPOT_TOOLS_UPDATE": [
-        "0"
-      ],
-      "PATH": [
-        "RECIPE_REPO[depot_tools]"
-      ]
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "None/tools/build.py",
       "--super-fast",
diff --git a/recipe_modules/build/tests/test_gn.expected/fail.json b/recipe_modules/build/tests/test_gn.expected/fail.json
index 7c0ea2f..95e3789 100644
--- a/recipe_modules/build/tests/test_gn.expected/fail.json
+++ b/recipe_modules/build/tests/test_gn.expected/fail.json
@@ -65,27 +65,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "env": {
-      "GOMA_DIR": "[CACHE]/goma/client"
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "None/tools/gn.py",
       "--super-fast"
diff --git a/recipe_modules/build/tests/test_gn.expected/no-goma.json b/recipe_modules/build/tests/test_gn.expected/no-goma.json
index 0dd9e14..20bfbf2 100644
--- a/recipe_modules/build/tests/test_gn.expected/no-goma.json
+++ b/recipe_modules/build/tests/test_gn.expected/no-goma.json
@@ -1,24 +1,7 @@
 [
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "None/tools/gn.py",
       "--super-fast",
diff --git a/recipe_modules/build/tests/test_gn.expected/success.json b/recipe_modules/build/tests/test_gn.expected/success.json
index 1cbc9c1..d999df9 100644
--- a/recipe_modules/build/tests/test_gn.expected/success.json
+++ b/recipe_modules/build/tests/test_gn.expected/success.json
@@ -65,27 +65,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "env": {
-      "GOMA_DIR": "[CACHE]/goma/client"
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "None/tools/gn.py",
       "--super-fast"
diff --git a/recipe_modules/build/tests/test_python.expected/detect-python3.json b/recipe_modules/build/tests/test_python.expected/detect-python3.json
deleted file mode 100644
index 23739bf..0000000
--- a/recipe_modules/build/tests/test_python.expected/detect-python3.json
+++ /dev/null
@@ -1,30 +0,0 @@
-[
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@build.py@#!/usr/bin/env python3@@@",
-      "@@@STEP_LOG_LINE@build.py@#@@@",
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python3"
-    ],
-    "name": "python"
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/build/tests/test_python.expected/force-python-wrong-python.json b/recipe_modules/build/tests/test_python.expected/force-python-wrong-python.json
deleted file mode 100644
index f21396a..0000000
--- a/recipe_modules/build/tests/test_python.expected/force-python-wrong-python.json
+++ /dev/null
@@ -1,40 +0,0 @@
-[
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [],
-    "name": "RECIPE CRASH (Uncaught exception)",
-    "~followup_annotations": [
-      "@@@STEP_EXCEPTION@@@",
-      "The recipe has crashed at point 'Uncaught exception'!",
-      "",
-      "Traceback (most recent call last):",
-      "  File \"RECIPE_REPO[dart]/recipe_modules/build/tests/test_python.py\", line 18, in RunSteps",
-      "    api.step('python', [api.build.python])",
-      "  File \"RECIPE_REPO[dart]/recipe_modules/build/api.py\", line 79, in python",
-      "    assert (python in ['python', 'python3'])",
-      "AssertionError"
-    ]
-  },
-  {
-    "failure": {
-      "humanReason": "Uncaught Exception: AssertionError()"
-    },
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/build/tests/test_python.expected/force-python.json b/recipe_modules/build/tests/test_python.expected/force-python.json
deleted file mode 100644
index a51304a..0000000
--- a/recipe_modules/build/tests/test_python.expected/force-python.json
+++ /dev/null
@@ -1,30 +0,0 @@
-[
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_LINE@build.py@#!/usr/bin/env python3@@@",
-      "@@@STEP_LOG_LINE@build.py@#@@@",
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python"
-    ],
-    "name": "python"
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/build/tests/test_python.expected/python.json b/recipe_modules/build/tests/test_python.expected/python.json
deleted file mode 100644
index ad7a613..0000000
--- a/recipe_modules/build/tests/test_python.expected/python.json
+++ /dev/null
@@ -1,28 +0,0 @@
-[
-  {
-    "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "None/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python"
-    ],
-    "name": "python"
-  },
-  {
-    "name": "$result"
-  }
-]
\ No newline at end of file
diff --git a/recipe_modules/build/tests/test_python.py b/recipe_modules/build/tests/test_python.py
deleted file mode 100644
index 8635818..0000000
--- a/recipe_modules/build/tests/test_python.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-from recipe_engine import post_process
-
-from PB.recipe_modules.dart.build.build import Build
-
-DEPS = [
-    'build',
-    'recipe_engine/file',
-    'recipe_engine/properties',
-    'recipe_engine/step',
-]
-
-
-def RunSteps(api):
-  api.step('python', [api.build.python])
-  api.build.python
-
-
-def _check_python(api, python):
-  return api.post_process(post_process.StepCommandContains, 'python', [python])
-
-
-def GenTests(api):
-  yield api.test(
-      'python',
-      _check_python(api, 'python'),
-      api.post_process(post_process.StatusSuccess),
-  )
-
-  yield api.test(
-      'detect-python3',
-      api.step_data(
-          'detect python version',
-          api.file.read_text(text_content='''#!/usr/bin/env python3
-#
-''')),
-      _check_python(api, 'python3'),
-      api.post_process(post_process.StatusSuccess),
-  )
-
-  yield api.test(
-      'force-python',
-      api.step_data(
-          'detect python version',
-          api.file.read_text(text_content='''#!/usr/bin/env python3
-#
-''')),
-      api.properties(python_version='python'),
-      _check_python(api, 'python'),
-      api.post_process(post_process.StatusSuccess),
-  )
-
-  yield api.test(
-      'force-python-wrong-python',
-      api.properties(python_version='python4'),
-      api.expect_exception('AssertionError'),
-      api.post_process(post_process.StatusException),
-  )
diff --git a/recipe_modules/dart/api.py b/recipe_modules/dart/api.py
index 9775811..c221618 100644
--- a/recipe_modules/dart/api.py
+++ b/recipe_modules/dart/api.py
@@ -116,7 +116,7 @@
     """Kills leftover tasks from previous runs or steps."""
     self.m.step(
         'kill processes', [
-            self.m.build.python, '-u', self.m.path['checkout'].join(
+            'python3', '-u', self.m.path['checkout'].join(
                 'tools', 'task_kill.py'), '--kill_browsers=True',
             '--kill_vsbuild=True'
         ],
@@ -1142,8 +1142,7 @@
           '/usr/bin/xvfb-run', '-a', '--server-args=-screen 0 1024x768x24'
       ]
     if is_python:
-      python = self.m.build.python
-      cmd_prefix += [python, '-u']
+      cmd_prefix += ['python3', '-u']
 
     step_name = step.name
     shards = shards or step.shards
diff --git a/recipe_modules/dart/examples/example.expected/analyzer-linux-release.json b/recipe_modules/dart/examples/example.expected/analyzer-linux-release.json
index d359664..5fc4715 100644
--- a/recipe_modules/dart/examples/example.expected/analyzer-linux-release.json
+++ b/recipe_modules/dart/examples/example.expected/analyzer-linux-release.json
@@ -89,24 +89,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -496,7 +479,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -729,7 +712,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/build.py",
       "--sanitizer=none",
@@ -1122,7 +1105,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-nunittest-asserts-release-linux\", \"--copy-coredumps\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"test1_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-nunittest-asserts-release-linux\", \"--copy-coredumps\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-nunittest-asserts-release-linux\", \"--copy-coredumps\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"test1_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-nunittest-asserts-release-linux\", \"--copy-coredumps\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -1222,7 +1205,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -1339,7 +1322,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -1414,7 +1397,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -1583,7 +1566,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"test3_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-nanalyzer-asserts-linux\", \"foo\", \"--bar\", \"--copy-coredumps\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"test3_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-nanalyzer-asserts-linux\", \"foo\", \"--bar\", \"--copy-coredumps\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -1672,7 +1655,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -1748,7 +1731,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -2200,7 +2183,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"tags\": [\"optional:true\"], \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-nunittest-asserts-release-linux\", \"--repeat=5\", \"--tests\", \"Flaky/Test/1\\nFlaky/Test/2\", \"--copy-coredumps\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"tags\": [\"optional:true\"], \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-nunittest-asserts-release-linux\", \"--repeat=5\", \"--tests\", \"Flaky/Test/1\\nFlaky/Test/2\", \"--copy-coredumps\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -2292,7 +2275,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -2390,7 +2373,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -2515,7 +2498,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
diff --git a/recipe_modules/dart/examples/example.expected/basic-mac.json b/recipe_modules/dart/examples/example.expected/basic-mac.json
index 8d1a54f..5b5a4ee 100644
--- a/recipe_modules/dart/examples/example.expected/basic-mac.json
+++ b/recipe_modules/dart/examples/example.expected/basic-mac.json
@@ -98,24 +98,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -642,7 +625,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/browsers/chrome/${platform}\", \"path\": \"third_party/browsers/chrome\", \"version\": \"version:81\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-mac-chrome\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--copy-coredumps\", \"--chrome=third_party/browsers/chrome/Google Chrome.app/Contents/MacOS/Google Chrome\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Mac\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"test1_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/browsers/chrome/${platform}\", \"path\": \"third_party/browsers/chrome\", \"version\": \"version:81\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-mac-chrome\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--copy-coredumps\", \"--chrome=third_party/browsers/chrome/Google Chrome.app/Contents/MacOS/Google Chrome\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Mac\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/browsers/chrome/${platform}\", \"path\": \"third_party/browsers/chrome\", \"version\": \"version:81\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-mac-chrome\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--copy-coredumps\", \"--chrome=third_party/browsers/chrome/Google Chrome.app/Contents/MacOS/Google Chrome\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Mac\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"test1_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/browsers/chrome/${platform}\", \"path\": \"third_party/browsers/chrome\", \"version\": \"version:81\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-mac-chrome\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--copy-coredumps\", \"--chrome=third_party/browsers/chrome/Google Chrome.app/Contents/MacOS/Google Chrome\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Mac\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -747,7 +730,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -873,7 +856,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -952,7 +935,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/custom_thing.py",
       "foo",
@@ -975,7 +958,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/custom_test_runner.py",
       "foo",
@@ -1059,7 +1042,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
diff --git a/recipe_modules/dart/examples/example.expected/basic-missing-name.json b/recipe_modules/dart/examples/example.expected/basic-missing-name.json
index 770bc4b..c16dec1 100644
--- a/recipe_modules/dart/examples/example.expected/basic-missing-name.json
+++ b/recipe_modules/dart/examples/example.expected/basic-missing-name.json
@@ -89,24 +89,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
diff --git a/recipe_modules/dart/examples/example.expected/basic.json b/recipe_modules/dart/examples/example.expected/basic.json
index 666ba88..0bfad12 100644
--- a/recipe_modules/dart/examples/example.expected/basic.json
+++ b/recipe_modules/dart/examples/example.expected/basic.json
@@ -137,23 +137,6 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
       "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
diff --git a/recipe_modules/dart/examples/example.expected/bisection-does-not-refer-to-latest-build-or-publish-results.json b/recipe_modules/dart/examples/example.expected/bisection-does-not-refer-to-latest-build-or-publish-results.json
index 13e7dce..66056a6 100644
--- a/recipe_modules/dart/examples/example.expected/bisection-does-not-refer-to-latest-build-or-publish-results.json
+++ b/recipe_modules/dart/examples/example.expected/bisection-does-not-refer-to-latest-build-or-publish-results.json
@@ -89,24 +89,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -629,7 +612,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"/usr/bin/xvfb-run\", \"-a\", \"--server-args=-screen 0 1024x768x24\", \"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-linux-firefox\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--copy-coredumps\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"test1_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"/usr/bin/xvfb-run\", \"-a\", \"--server-args=-screen 0 1024x768x24\", \"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-linux-firefox\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--copy-coredumps\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"/usr/bin/xvfb-run\", \"-a\", \"--server-args=-screen 0 1024x768x24\", \"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-linux-firefox\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--copy-coredumps\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"test1_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"/usr/bin/xvfb-run\", \"-a\", \"--server-args=-screen 0 1024x768x24\", \"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-linux-firefox\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--copy-coredumps\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -732,7 +715,7 @@
       "@@@STEP_LOG_LINE@json.input@              \"/usr/bin/xvfb-run\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-a\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--server-args=-screen 0 1024x768x24\", @@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -855,7 +838,7 @@
       "@@@STEP_LOG_LINE@json.input@              \"/usr/bin/xvfb-run\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-a\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--server-args=-screen 0 1024x768x24\", @@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -936,7 +919,7 @@
       "/usr/bin/xvfb-run",
       "-a",
       "--server-args=-screen 0 1024x768x24",
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/custom_thing.py",
       "foo",
@@ -962,7 +945,7 @@
       "/usr/bin/xvfb-run",
       "-a",
       "--server-args=-screen 0 1024x768x24",
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/custom_test_runner.py",
       "foo",
@@ -1052,7 +1035,7 @@
       "/usr/bin/xvfb-run",
       "-a",
       "--server-args=-screen 0 1024x768x24",
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -1423,7 +1406,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"tags\": [\"optional:true\"], \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"/usr/bin/xvfb-run\", \"-a\", \"--server-args=-screen 0 1024x768x24\", \"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-linux-firefox\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--repeat=5\", \"--tests\", \"Flaky/Test/1\\nFlaky/Test/2\", \"--copy-coredumps\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"tags\": [\"optional:true\"], \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"/usr/bin/xvfb-run\", \"-a\", \"--server-args=-screen 0 1024x768x24\", \"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndart2js-linux-firefox\", \"foo\", \"--bar\", \"-e co19, language_2\", \"--repeat=5\", \"--tests\", \"Flaky/Test/1\\nFlaky/Test/2\", \"--copy-coredumps\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -1518,7 +1501,7 @@
       "@@@STEP_LOG_LINE@json.input@              \"/usr/bin/xvfb-run\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-a\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--server-args=-screen 0 1024x768x24\", @@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -1622,7 +1605,7 @@
       "/usr/bin/xvfb-run",
       "-a",
       "--server-args=-screen 0 1024x768x24",
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
diff --git a/recipe_modules/dart/examples/example.expected/branch-builder-does-not-publish-results.json b/recipe_modules/dart/examples/example.expected/branch-builder-does-not-publish-results.json
index 7259bc2..0902564 100644
--- a/recipe_modules/dart/examples/example.expected/branch-builder-does-not-publish-results.json
+++ b/recipe_modules/dart/examples/example.expected/branch-builder-does-not-publish-results.json
@@ -89,24 +89,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -496,7 +479,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -736,7 +719,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
diff --git a/recipe_modules/dart/examples/example.expected/ci-test-data-branch-builder-does-publish-results.json b/recipe_modules/dart/examples/example.expected/ci-test-data-branch-builder-does-publish-results.json
index 776773c..67e9040 100644
--- a/recipe_modules/dart/examples/example.expected/ci-test-data-branch-builder-does-publish-results.json
+++ b/recipe_modules/dart/examples/example.expected/ci-test-data-branch-builder-does-publish-results.json
@@ -89,24 +89,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -496,7 +479,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -736,7 +719,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
diff --git a/recipe_modules/dart/examples/example.expected/co19.json b/recipe_modules/dart/examples/example.expected/co19.json
index 4983e0a..7d07f45 100644
--- a/recipe_modules/dart/examples/example.expected/co19.json
+++ b/recipe_modules/dart/examples/example.expected/co19.json
@@ -89,7 +89,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"co19_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/third_party/co19\", \"path\": \"tests/co19/src\", \"version\": \"git_revision:co19_hash\"}, {\"package_name\": \"dart/third_party/co19/legacy\", \"path\": \"tests/co19_2/src\", \"version\": \"git_revision:co19_2_hash\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"co19/nnbd\", \"co19_2\", \"--copy-coredumps\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"co19_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/third_party/co19\", \"path\": \"tests/co19/src\", \"version\": \"git_revision:co19_hash\"}, {\"package_name\": \"dart/third_party/co19/legacy\", \"path\": \"tests/co19_2/src\", \"version\": \"git_revision:co19_2_hash\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"co19/nnbd\", \"co19_2\", \"--copy-coredumps\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -188,7 +188,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -375,7 +375,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"co19_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"tags\": [\"optional:true\"], \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/third_party/co19\", \"path\": \"tests/co19/src\", \"version\": \"git_revision:co19_hash\"}, {\"package_name\": \"dart/third_party/co19/legacy\", \"path\": \"tests/co19_2/src\", \"version\": \"git_revision:co19_2_hash\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"co19/nnbd\", \"co19_2\", \"--repeat=5\", \"--tests\", \"Flaky/Test/1\\nFlaky/Test/2\", \"--copy-coredumps\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"co19_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"tags\": [\"optional:true\"], \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/third_party/co19\", \"path\": \"tests/co19/src\", \"version\": \"git_revision:co19_hash\"}, {\"package_name\": \"dart/third_party/co19/legacy\", \"path\": \"tests/co19_2/src\", \"version\": \"git_revision:co19_2_hash\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"co19/nnbd\", \"co19_2\", \"--repeat=5\", \"--tests\", \"Flaky/Test/1\\nFlaky/Test/2\", \"--copy-coredumps\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Linux\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -477,7 +477,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
diff --git a/recipe_modules/dart/examples/example.expected/example-android.json b/recipe_modules/dart/examples/example.expected/example-android.json
index cae8be0..1260dc6 100644
--- a/recipe_modules/dart/examples/example.expected/example-android.json
+++ b/recipe_modules/dart/examples/example.expected/example-android.json
@@ -89,24 +89,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -629,7 +612,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"android_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndartkp-android-release-arm64\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"os\", \"value\": \"Android\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"android_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndartkp-android-release-arm64\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"os\", \"value\": \"Android\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"android_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndartkp-android-release-arm64\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"os\", \"value\": \"Android\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"android_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndartkp-android-release-arm64\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"os\", \"value\": \"Android\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -729,7 +712,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -845,7 +828,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -1195,7 +1178,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"android_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"tags\": [\"optional:true\"], \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndartkp-android-release-arm64\", \"--repeat=5\", \"--tests\", \"Flaky/Test/1\\nFlaky/Test/2\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"os\", \"value\": \"Android\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"android_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"tags\": [\"optional:true\"], \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndartkp-android-release-arm64\", \"--repeat=5\", \"--tests\", \"Flaky/Test/1\\nFlaky/Test/2\", \"--shards=1\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"arm64\"}, {\"key\": \"os\", \"value\": \"Android\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -1287,7 +1270,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
diff --git a/recipe_modules/dart/examples/example.expected/example-mac.json b/recipe_modules/dart/examples/example.expected/example-mac.json
index 68930886..ba7911d 100644
--- a/recipe_modules/dart/examples/example.expected/example-mac.json
+++ b/recipe_modules/dart/examples/example.expected/example-mac.json
@@ -89,24 +89,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -496,7 +479,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -729,7 +712,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/build.py",
       "--sanitizer=none",
diff --git a/recipe_modules/dart/examples/example.expected/fuzz-test.json b/recipe_modules/dart/examples/example.expected/fuzz-test.json
index eb743e2..24a0b51 100644
--- a/recipe_modules/dart/examples/example.expected/fuzz-test.json
+++ b/recipe_modules/dart/examples/example.expected/fuzz-test.json
@@ -89,24 +89,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
diff --git a/recipe_modules/dart/examples/example.expected/release-builder-does-not-publish-results.json b/recipe_modules/dart/examples/example.expected/release-builder-does-not-publish-results.json
index 57b8240..7bba46c 100644
--- a/recipe_modules/dart/examples/example.expected/release-builder-does-not-publish-results.json
+++ b/recipe_modules/dart/examples/example.expected/release-builder-does-not-publish-results.json
@@ -89,24 +89,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -496,7 +479,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -736,7 +719,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
diff --git a/recipe_modules/dart/examples/example.expected/vm-win.json b/recipe_modules/dart/examples/example.expected/vm-win.json
index 3c487f9..0e11e25 100644
--- a/recipe_modules/dart/examples/example.expected/vm-win.json
+++ b/recipe_modules/dart/examples/example.expected/vm-win.json
@@ -101,24 +101,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]\\resources\\fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]\\builder\\sdk\\tools\\build.py",
-      "/path/to/tmp/"
-    ],
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]\\builder\\sdk\\tools\\task_kill.py",
       "--kill_browsers=True",
@@ -600,7 +583,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]\\builder\\sdk\\tools\\gn.py",
       "--sanitizer=none",
@@ -627,7 +610,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]\\builder\\sdk\\tools\\task_kill.py",
       "--kill_browsers=True",
@@ -773,7 +756,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]\\builder\\sdk\\tools\\build.py",
       "--sanitizer=none",
@@ -1178,7 +1161,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/third_party/co19/legacy\", \"path\": \"tests/co19_2/src\", \"version\": \"git_revision:co19_2_hash\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"foo\", \"-ndartk-win-release-simarm_x64\", \"language_2\", \"co19_2/sel\", \"--exclude_suite=co19\", \"--copy-coredumps\", \"--cleanup-dart-processes\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Windows\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"test1_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/third_party/co19/legacy\", \"path\": \"tests/co19_2/src\", \"version\": \"git_revision:co19_2_hash\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"foo\", \"-ndartk-win-release-simarm_x64\", \"language_2\", \"co19_2/sel\", \"--exclude_suite=co19\", \"--copy-coredumps\", \"--cleanup-dart-processes\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Windows\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"test1_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/third_party/co19/legacy\", \"path\": \"tests/co19_2/src\", \"version\": \"git_revision:co19_2_hash\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"foo\", \"-ndartk-win-release-simarm_x64\", \"language_2\", \"co19_2/sel\", \"--exclude_suite=co19\", \"--copy-coredumps\", \"--cleanup-dart-processes\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Windows\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}, {\"name\": \"test1_shard_2\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/third_party/co19/legacy\", \"path\": \"tests/co19_2/src\", \"version\": \"git_revision:co19_2_hash\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"foo\", \"-ndartk-win-release-simarm_x64\", \"language_2\", \"co19_2/sel\", \"--exclude_suite=co19\", \"--copy-coredumps\", \"--cleanup-dart-processes\", \"--shards=2\", \"--shard=2\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Windows\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -1284,7 +1267,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -1411,7 +1394,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -1491,7 +1474,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]\\builder\\sdk\\tools\\test.py",
       "--progress=status",
@@ -1683,7 +1666,7 @@
       "-server",
       "https://example.swarmingserver.appspot.com",
       "-json-input",
-      "{\"requests\": [{\"name\": \"test3_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndartk-win-release-simarm_x64\", \"foo\", \"--bar\", \"--copy-coredumps\", \"--cleanup-dart-processes\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Windows\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
+      "{\"requests\": [{\"name\": \"test3_shard_1\", \"priority\": \"25\", \"service_account\": \"\", \"task_slices\": [{\"expiration_secs\": \"3600\", \"properties\": {\"caches\": [{\"name\": \"vpython\", \"path\": \"cache/vpython\"}], \"cas_input_root\": {\"cas_instance\": \"projects/example-cas-server/instances/default_instance\", \"digest\": {\"hash\": \"test_hash\", \"size_bytes\": \"47\"}}, \"cipd_input\": {\"packages\": [{\"package_name\": \"infra/tools/luci/vpython/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/tools/luci/vpython-native/${platform}\", \"path\": \"cipd_bin_packages\", \"version\": \"git_revision:b01b3ede35a24f76f21420f11d13f234848e5d34\"}, {\"package_name\": \"infra/3pp/tools/cpython/${platform}\", \"path\": \"cipd_bin_packages/cpython\", \"version\": \"version:2.7.17.chromium.24\"}, {\"package_name\": \"infra/3pp/tools/cpython3/${platform}\", \"path\": \"cipd_bin_packages/cpython3\", \"version\": \"version:3.8.1rc1.chromium.10\"}, {\"package_name\": \"dart/dart-sdk/${platform}\", \"path\": \"tools/sdks\", \"version\": \"version:2.9.0-18.0.dev\"}]}, \"command\": [\"python3\", \"-u\", \"tools/test.py\", \"--progress=status\", \"--report\", \"--time\", \"--silent-failures\", \"--write-results\", \"--write-logs\", \"--clean-exit\", \"-ndartk-win-release-simarm_x64\", \"foo\", \"--bar\", \"--copy-coredumps\", \"--cleanup-dart-processes\", \"--shards=2\", \"--shard=1\", \"--output-directory=${ISOLATED_OUTDIR}\"], \"containment\": {\"containment_type\": \"AUTO\", \"limit_processes\": \"0\", \"limit_total_committed_memory\": \"0\", \"lower_priority\": false}, \"dimensions\": [{\"key\": \"cpu\", \"value\": \"x86-64\"}, {\"key\": \"os\", \"value\": \"Windows\"}, {\"key\": \"pool\", \"value\": \"dart.tests\"}], \"env\": [{\"key\": \"VPYTHON_VIRTUALENV_ROOT\", \"value\": \"cache/vpython\"}], \"env_prefixes\": [{\"key\": \"PATH\", \"value\": [\"cipd_bin_packages\", \"cipd_bin_packages/bin\", \"cipd_bin_packages/cpython\", \"cipd_bin_packages/cpython/bin\", \"cipd_bin_packages/cpython3\", \"cipd_bin_packages/cpython3/bin\"]}], \"execution_timeout_secs\": \"3600\", \"grace_period_secs\": \"30\", \"idempotent\": false, \"io_timeout_secs\": \"1200\", \"outputs\": [], \"relative_cwd\": \"\"}, \"wait_for_capacity\": false}]}]}",
       "-json-output",
       "/path/to/tmp/json"
     ],
@@ -1773,7 +1756,7 @@
       "@@@STEP_LOG_LINE@json.input@              ]@@@",
       "@@@STEP_LOG_LINE@json.input@            }, @@@",
       "@@@STEP_LOG_LINE@json.input@            \"command\": [@@@",
-      "@@@STEP_LOG_LINE@json.input@              \"python\", @@@",
+      "@@@STEP_LOG_LINE@json.input@              \"python3\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"-u\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"tools/test.py\", @@@",
       "@@@STEP_LOG_LINE@json.input@              \"--progress=status\", @@@",
@@ -1850,7 +1833,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]\\builder\\sdk\\tools\\test.py",
       "--progress=status",
diff --git a/recipe_modules/dart/examples/example.py b/recipe_modules/dart/examples/example.py
index a976d4d..cc2f0ee 100644
--- a/recipe_modules/dart/examples/example.py
+++ b/recipe_modules/dart/examples/example.py
@@ -353,9 +353,7 @@
   yield api.test(
       'basic',
       api.properties(
-          shard_timeout='600',
-          custom_vars={'download_firefox': True},
-          python_version='python3'),
+          shard_timeout='600', custom_vars={'download_firefox': True}),
       api.buildbucket.try_build(
           build_number=1357,
           builder='dart2js-strong-linux-x64-firefox-try',
diff --git a/recipes/dart/neo.expected/builders_dart2js-win-debug-x64-firefox-try.json b/recipes/dart/neo.expected/builders_dart2js-win-debug-x64-firefox-try.json
index dc79e8d..97fd237 100644
--- a/recipes/dart/neo.expected/builders_dart2js-win-debug-x64-firefox-try.json
+++ b/recipes/dart/neo.expected/builders_dart2js-win-debug-x64-firefox-try.json
@@ -140,27 +140,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "env": {
-      "ANALYZER_STATE_LOCATION_OVERRIDE": "[CLEANUP]/analysis-cache"
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -344,7 +324,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -583,7 +563,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/build.py",
       "--sanitizer=none",
@@ -835,7 +815,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -932,7 +912,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -1388,7 +1368,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
diff --git a/recipes/dart/neo.expected/failing-test-step-starts-bisection.json b/recipes/dart/neo.expected/failing-test-step-starts-bisection.json
index ca47daa..a99b9f9 100644
--- a/recipes/dart/neo.expected/failing-test-step-starts-bisection.json
+++ b/recipes/dart/neo.expected/failing-test-step-starts-bisection.json
@@ -91,27 +91,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "env": {
-      "ANALYZER_STATE_LOCATION_OVERRIDE": "[CLEANUP]/analysis-cache"
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -291,7 +271,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -530,7 +510,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/build.py",
       "--sanitizer=none",
@@ -782,7 +762,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -878,7 +858,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -1668,7 +1648,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
diff --git a/recipes/dart/neo.expected/infra-failure-does-not-start-bisection.json b/recipes/dart/neo.expected/infra-failure-does-not-start-bisection.json
index c969aad..a102587 100644
--- a/recipes/dart/neo.expected/infra-failure-does-not-start-bisection.json
+++ b/recipes/dart/neo.expected/infra-failure-does-not-start-bisection.json
@@ -91,27 +91,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "env": {
-      "ANALYZER_STATE_LOCATION_OVERRIDE": "[CLEANUP]/analysis-cache"
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -291,7 +271,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -530,7 +510,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/build.py",
       "--sanitizer=none",
@@ -782,7 +762,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -878,7 +858,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -1668,7 +1648,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
diff --git a/recipes/dart/neo.expected/successful-build-does-not-start-bisection.json b/recipes/dart/neo.expected/successful-build-does-not-start-bisection.json
index 2ae2056..6180956 100644
--- a/recipes/dart/neo.expected/successful-build-does-not-start-bisection.json
+++ b/recipes/dart/neo.expected/successful-build-does-not-start-bisection.json
@@ -91,27 +91,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "env": {
-      "ANALYZER_STATE_LOCATION_OVERRIDE": "[CLEANUP]/analysis-cache"
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -291,7 +271,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -530,7 +510,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/build.py",
       "--sanitizer=none",
@@ -782,7 +762,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -878,7 +858,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/test.py",
       "--progress=status",
@@ -1667,7 +1647,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
diff --git a/recipes/dart/neo.expected/toplevel-infra-failure-does-not-start-bisection.json b/recipes/dart/neo.expected/toplevel-infra-failure-does-not-start-bisection.json
index d7bc1da..00b7b37 100644
--- a/recipes/dart/neo.expected/toplevel-infra-failure-does-not-start-bisection.json
+++ b/recipes/dart/neo.expected/toplevel-infra-failure-does-not-start-bisection.json
@@ -91,27 +91,7 @@
   },
   {
     "cmd": [
-      "vpython",
-      "-u",
-      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
-      "--json-output",
-      "/path/to/tmp/json",
-      "copy",
-      "[CACHE]/builder/sdk/tools/build.py",
-      "/path/to/tmp/"
-    ],
-    "env": {
-      "ANALYZER_STATE_LOCATION_OVERRIDE": "[CLEANUP]/analysis-cache"
-    },
-    "infra_step": true,
-    "name": "detect python version",
-    "~followup_annotations": [
-      "@@@STEP_LOG_END@build.py@@@"
-    ]
-  },
-  {
-    "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",
@@ -189,7 +169,7 @@
   },
   {
     "cmd": [
-      "python",
+      "python3",
       "-u",
       "[CACHE]/builder/sdk/tools/task_kill.py",
       "--kill_browsers=True",