diff --git a/build/gen.py b/build/gen.py
index a463920..41d1571 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -687,6 +687,7 @@
         'src/gn/input_conversion.cc',
         'src/gn/input_file.cc',
         'src/gn/input_file_manager.cc',
+        'src/gn/invoke_python.cc',
         'src/gn/item.cc',
         'src/gn/json_project_writer.cc',
         'src/gn/label.cc',
diff --git a/src/gn/invoke_python.cc b/src/gn/invoke_python.cc
new file mode 100644
index 0000000..c54ad72
--- /dev/null
+++ b/src/gn/invoke_python.cc
@@ -0,0 +1,60 @@
+// Copyright (c) 2024 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gn/invoke_python.h"
+
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/strings/string_number_conversions.h"
+#include "gn/build_settings.h"
+#include "gn/err.h"
+#include "gn/exec_process.h"
+#include "gn/filesystem_utils.h"
+
+namespace internal {
+
+bool InvokePython(const BuildSettings* build_settings,
+                  const base::FilePath& python_script_path,
+                  const std::string& python_script_extra_args,
+                  const base::FilePath& output_path,
+                  bool quiet,
+                  Err* err) {
+  const base::FilePath& python_path = build_settings->python_path();
+  base::CommandLine cmdline(python_path);
+  cmdline.AppendArg("--");
+  cmdline.AppendArgPath(python_script_path);
+  cmdline.AppendArgPath(output_path);
+  if (!python_script_extra_args.empty()) {
+    cmdline.AppendArg(python_script_extra_args);
+  }
+  base::FilePath startup_dir =
+      build_settings->GetFullPath(build_settings->build_dir());
+
+  std::string output;
+  std::string stderr_output;
+
+  int exit_code = 0;
+  if (!internal::ExecProcess(cmdline, startup_dir, &output, &stderr_output,
+                             &exit_code)) {
+    *err =
+        Err(Location(), "Could not execute python.",
+            "I was trying to execute \"" + FilePathToUTF8(python_path) + "\".");
+    return false;
+  }
+
+  if (!quiet) {
+    printf("%s", output.c_str());
+    fprintf(stderr, "%s", stderr_output.c_str());
+  }
+
+  if (exit_code != 0) {
+    *err = Err(Location(), "Python has quit with exit code " +
+                               base::IntToString(exit_code) + ".");
+    return false;
+  }
+
+  return true;
+}
+
+}  // namespace internal
diff --git a/src/gn/invoke_python.h b/src/gn/invoke_python.h
new file mode 100644
index 0000000..0c66dbb
--- /dev/null
+++ b/src/gn/invoke_python.h
@@ -0,0 +1,28 @@
+// Copyright (c) 2024 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef TOOLS_GN_INVOKE_PYTHON_H_
+#define TOOLS_GN_INVOKE_PYTHON_H_
+
+#include <string>
+
+namespace base {
+class FilePath;
+}  // namespace base
+
+class BuildSettings;
+class Err;
+
+namespace internal {
+
+bool InvokePython(const BuildSettings* build_settings,
+                  const base::FilePath& python_script_path,
+                  const std::string& python_script_extra_args,
+                  const base::FilePath& output_path,
+                  bool quiet,
+                  Err* err);
+
+}  // namespace internal
+
+#endif  // TOOLS_UTILS_INVOKE_PYTHON_H_
diff --git a/src/gn/json_project_writer.cc b/src/gn/json_project_writer.cc
index 96ddacc..1ea06ff 100644
--- a/src/gn/json_project_writer.cc
+++ b/src/gn/json_project_writer.cc
@@ -13,13 +13,12 @@
 #include "base/files/file_path.h"
 #include "base/json/json_writer.h"
 #include "base/json/string_escape.h"
-#include "base/strings/string_number_conversions.h"
 #include "gn/builder.h"
 #include "gn/commands.h"
 #include "gn/deps_iterator.h"
 #include "gn/desc_builder.h"
-#include "gn/exec_process.h"
 #include "gn/filesystem_utils.h"
+#include "gn/invoke_python.h"
 #include "gn/scheduler.h"
 #include "gn/settings.h"
 #include "gn/string_output_buffer.h"
@@ -84,49 +83,6 @@
   return true;
 }
 
-bool InvokePython(const BuildSettings* build_settings,
-                  const base::FilePath& python_script_path,
-                  const std::string& python_script_extra_args,
-                  const base::FilePath& output_path,
-                  bool quiet,
-                  Err* err) {
-  const base::FilePath& python_path = build_settings->python_path();
-  base::CommandLine cmdline(python_path);
-  cmdline.AppendArg("--");
-  cmdline.AppendArgPath(python_script_path);
-  cmdline.AppendArgPath(output_path);
-  if (!python_script_extra_args.empty()) {
-    cmdline.AppendArg(python_script_extra_args);
-  }
-  base::FilePath startup_dir =
-      build_settings->GetFullPath(build_settings->build_dir());
-
-  std::string output;
-  std::string stderr_output;
-
-  int exit_code = 0;
-  if (!internal::ExecProcess(cmdline, startup_dir, &output, &stderr_output,
-                             &exit_code)) {
-    *err =
-        Err(Location(), "Could not execute python.",
-            "I was trying to execute \"" + FilePathToUTF8(python_path) + "\".");
-    return false;
-  }
-
-  if (!quiet) {
-    printf("%s", output.c_str());
-    fprintf(stderr, "%s", stderr_output.c_str());
-  }
-
-  if (exit_code != 0) {
-    *err = Err(Location(), "Python has quit with exit code " +
-                               base::IntToString(exit_code) + ".");
-    return false;
-  }
-
-  return true;
-}
-
 }  // namespace
 
 bool JSONProjectWriter::RunAndWriteFiles(
@@ -172,8 +128,9 @@
         script_file = SourceFile(exec_script);
       }
       base::FilePath script_path = build_settings->GetFullPath(script_file);
-      return InvokePython(build_settings, script_path, exec_script_extra_args,
-                          output_path, quiet, err);
+      return internal::InvokePython(build_settings, script_path,
+                                    exec_script_extra_args, output_path, quiet,
+                                    err);
     }
   }
 
