private @NotNull String executeAndParseOutput(@NlsContexts.DialogMessage @NotNull String ipType,
                                                @NotNull Function<List<@NlsSafe String>, @Nullable String> parser,
                                                @NotNull String @NotNull ... command)
    throws ExecutionException {
    final ProcessOutput output;
    output = executeOnWsl(Arrays.asList(command), new WSLCommandLineOptions(), 10_000, null);
    if (LOG.isDebugEnabled()) LOG.debug(ipType + " " + getId());
    if (!output.checkSuccess(LOG)) {
      LOG.warn(String.format("%s. Exit code: %s. Error %s", ipType, output.getExitCode(), output.getStderr()));
      throw new ExecutionException(IdeBundle.message("wsl.cant.parse.ip.no.output", ipType));
    }
    var stdout = output.getStdoutLines(true);
    var ip = parser.apply(stdout);
    if (ip != null) {
      return ip;
    }
    LOG.warn(String.format("Can't parse data for %s, stdout is %s", ipType, String.join("\n", stdout)));
    throw new ExecutionException(IdeBundle.message("wsl.cant.parse.ip.process.failed", ipType));
  }
private @NotNull String executeAndParseOutput(@NlsContexts.DialogMessage @NotNull String ipType,
                                                @NotNull Function<List<@NlsSafe String>, @Nullable String> parser,
                                                @NotNull String @NotNull ... command)