Как проверить существование программы в пути

Попробуйте перейти к окну powershell или командной строке cmd и введите:

python -m pip install openpyxl

14
задан Steve Gury 31 May 2009 в 22:52
поделиться

4 ответа

I'm no scala programmer, but what I would do in any language, is to execute something like 'svn help' just to check the return code (0 or 1) of the exec method... if it fails the svn is not in the path :P

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("svn help");
int exitVal = proc.exitValue();

By convention, the value 0 indicates normal termination.

13
ответ дан 1 December 2019 в 00:41
поделиться

Это подобно Dmitry Ginzburg ответ, но он также обращается к редкому случаю кого-то имеющего недопустимый путь в PATH переменная среды. Это вызвало бы InvalidPathException.

private static final String ENVIRONMENT_VARIABLES_TEXT = System.getenv("PATH");

private static boolean isCommandAvailable(String executableFileName)
{
    String[] environmentVariables = ENVIRONMENT_VARIABLES_TEXT.split(File.pathSeparator);
    for (String environmentVariable : environmentVariables)
    {
        try
        {
            Path environmentVariablePath = Paths.get(environmentVariable);
            if (Files.exists(environmentVariablePath))
            {
                Path resolvedEnvironmentVariableFilePath = environmentVariablePath.resolve(executableFileName);
                if (Files.isExecutable(resolvedEnvironmentVariableFilePath))
                {
                    return true;
                }
            }
        } catch (InvalidPathException exception)
        {
            exception.printStackTrace();
        }
    }

    return false;
}

Полный это могло бы теперь быть самым эффективным и надежным решением.

0
ответ дан 1 December 2019 в 00:41
поделиться

Если вы если установлен cygwin, вы можете сначала вызвать «which svn», который вернет абсолютный путь к svn, если он находится в исполняемом пути, или «which: no svn in (...)». Вызов «which» вернет значение exitValue, равное 1, если не найдено, или 0, если оно найдено. Вы можете проверить этот код ошибки в описании FMF.

0
ответ дан 1 December 2019 в 00:41
поделиться

Что касается исходного вопроса, я бы также проверил его существование, как предлагал FMF.

Я также хотел бы указать, что вам придется обрабатывать, по крайней мере, вывод процесса , читая доступные данные, чтобы потоки не были заполнены до краев. В противном случае это приведет к блокировке процесса.

Для этого извлеките InputStreams процесса с помощью proc.getInputStream () (для System.out) и proc.getErrorStream () (для System.err) и прочтите доступный данные в разных потоках.

Я просто говорю вам, потому что это распространенная ошибка, и svn потенциально может создать довольно много вывода, поэтому, пожалуйста, не голосуйте против оффтопа;)

2
ответ дан 1 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: