using System.Diagnostics; namespace Sdt.Core; internal static class PythonResolver { public static string ResolveExecutable() { var candidates = OperatingSystem.IsWindows() ? new[] { "python", "py" } : new[] { "python3", "python" }; foreach (var candidate in candidates) { if (CanRun(candidate)) return candidate; } return "python"; } private static bool CanRun(string exe) { try { var psi = new ProcessStartInfo { FileName = exe, RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true, }; psi.ArgumentList.Add("--version"); using var p = new Process { StartInfo = psi }; p.Start(); p.WaitForExit(2000); return p.ExitCode == 0; } catch { return false; } } }