Существует ли эквивалент Python для команды «which»

Иными словами, существует ли межплатформенный способ узнать, какой файл будет выполняться subprocess.Popen(file) без его первого запуска?

  • Каково возвращаемое значение os.system () в Python?
  • does close () подразумевает flush () в Python?
  • Как скопировать каталог и его содержимое в существующее место с помощью Python?
  • Как я могу прочитать системную информацию в Python на OS X?
  • Как я могу читать системную информацию в Python в Windows?
  • Зачем использовать методы модуля os для Python вместо выполнения команд оболочки напрямую?
  • subprocess.call () игнорируются при использовании shell = True w / list
  • трубопроводы в оболочке через модуль подпроцесса Python
  • Почему subprocess.Popen () с shell = True работает по-разному в Linux и Windows?
  • Выполнить команду терминала из python в новом окне терминала?
  • Как печатать текст с кодировкой UTF-8 на консоли в Python <3?
  • does close () подразумевает flush () в Python?
  • 3 Solutions collect form web for “Существует ли эквивалент Python для команды «which»”

    Я считаю, что в библиотеках python нет ни одного

     >>> def which(pgm): path=os.getenv('PATH') for p in path.split(os.path.pathsep): p=os.path.join(p,pgm) if os.path.exists(p) and os.access(p,os.X_OK): return p >>> os.which=which >>> os.which('ls.exe') 'C:\\GNUwin32\\bin\\ls.exe' 

    Python 3.3 добавил shutil.which() чтобы обеспечить кросс-платформенное средство для обнаружения исполняемых файлов:

    http://docs.python.org/3.3/library/shutil.html#shutil.which

    Верните путь к исполняемому файлу, который будет запущен, если был вызван данный cmd. Если не будет вызываться cmd, верните None.

    Примеры вызовов:

     >>> shutil.which("python") '/usr/local/bin/python' >>> shutil.which("python") 'C:\\Python33\\python.EXE' 

    К сожалению, это не было обращено на 2.7.x.

    Опция для Python 2 и 3:

     from distutils.spawn import find_executable find_executable('python') # '/usr/bin/python' find_executable('does_not_exist') # None 

    find_executable(executable, path=None) просто пытается найти «исполняемый файл» в каталогах, перечисленных в «пути». По умолчанию os.environ['PATH'] если 'path' – None . Возвращает полный путь к «исполняемому файлу» или « None если не найден.

    Имейте в виду, что в отличие от which find_executable фактически не проверяет, что результат отмечен как исполняемый. Вы можете вызвать os.access(path, os.X_OK) чтобы проверить это самостоятельно, если хотите убедиться, что subprocess.Popen сможет выполнить файл.


    Также следует отметить, что shutil.which Python 3.3+ был предоставлен и доступен для Python 2.6, 2.7 и 3.x через сторонний модуль thatcraft .

    Он доступен для установки через вышеупомянутую страницу GitHub (например, pip install git+https://github.com/pydanny/whichcraft.git ) или индекс пакета Python (например, pip install whichcraft ). Его можно использовать так:

     from whichcraft import which which('wget') # '/usr/bin/wget' 
    Python - лучший язык программирования в мире.