os.path.exists () для файлов в Вашем Пути?

Как упомянуто в файле ReadMe плагина,

Вам понадобится работающий внутренний сервер для генерации заказов на оплату. Не генерируйте заказ или контрольную сумму в приложении.

BLOCKQUOTE>

14
задан kabirbaidhya 21 August 2017 в 07:37
поделиться

5 ответов

Вы можете получить переменную окружения PATH и попробовать "exist ()" для .exe в каждом каталоге в пути. Но это может показаться ужасным.

пример для поиска notepad.exe:

import os
for p in os.environ["PATH"].split(os.pathsep):
    print os.path.exists(os.path.join(p, 'notepad.exe'))

более умный пример:

if not any([os.path.exists(os.path.join(p, executable) for p in os.environ["PATH"].split(os.pathsep)]):
    print "can't find %s" % executable

Есть ли конкретная причина, по которой вы хотите избежать исключения? (кроме догмы?)

14
ответ дан 1 December 2019 в 12:53
поделиться

Обратите внимание, что проверка на наличие и последующее открытие всегда открыта для условий гонки. Файл может исчезнуть между проверкой вашей программы и следующим доступом к файлу, так как другие программы продолжают работать на компьютере.

Таким образом, все еще может возникать исключение, даже если ваш код «уверен», что файл существуют. В конце концов, именно поэтому они называются исключениями.

2
ответ дан 1 December 2019 в 12:53
поделиться

Как правило, не следует использовать os.path.exist для попытаться выяснить, если что-нибудь получится. Вы должны просто попробовать это, и если хотите, вы можете обработать исключение, если оно завершится неудачей.

2
ответ дан 1 December 2019 в 12:53
поделиться

В Unix вам нужно разделить переменную PATH.

if any([os.path.exists(os.path.join(p,progname)) for p in os.environ["PATH"].split(":")]):
    do_something()
0
ответ дан 1 December 2019 в 12:53
поделиться

Расширение поиска Трея Стаута с комментарием Карла Мейера к PATHEXT:

import os
def exists_in_path(cmd):
  # can't search the path if a directory is specified
  assert not os.path.dirname(cmd)

  extensions = os.environ.get("PATHEXT", "").split(os.pathsep)
  for directory in os.environ.get("PATH", "").split(os.pathsep):
    base = os.path.join(directory, cmd)
    options = [base] + [(base + ext) for ext in extensions]
    for filename in options:
      if os.path.exists(filename):
        return True
  return False

РЕДАКТИРОВАТЬ: Благодаря Авиву (в моем блоге) я теперь знаю, что есть реализация Twisted: twisted.python.procutils.which

3
ответ дан 1 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

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