POSIX-совместимый глобус в Python - PullRequest
0 голосов
/ 29 июня 2018

Я реализую часть программы на C на Python. Эта программа использует glob (3) для поиска путей, соответствующих шаблону. Это функция C, соответствующая встроенной оболочке glob (7) . Они указаны в POSIX.2.

Что эквивалентно POSIX glob(3) в Python?

Я заглянул в стандартный модуль glob , но меня беспокоит документация: он нигде не упоминает POSIX, использует нечеткий термин "подобный оболочке" и имеет некоторые нестандартные расширения, такие как wildstar ** шаблоны для рекурсивного расширения.

Безопасно ли использовать функцию glob.glob, если я не использую флаг recursive?

Мои требования:

  • Должно совпадать с результатами glob(3), обработка ошибок может отличаться
  • Должно работать как на Python 2, так и на Python 3
  • Требуется только поддержка Linux
  • Ответы, в которых упоминаются пакеты PyPi, хороши, я предпочитаю пакеты меньшего размера, которые можно проверять и продавать.
  • Я могу использовать ctypes, но ищу решение Pythonic

1 Ответ

0 голосов
/ 30 июня 2018

Глядя на то, как реализован glob, он не полагается на glob(3), поэтому он может, но не гарантирует, что он даст идентичные результаты. То же самое относится и к соответствию POSIX (кроме явно расширенной функциональности). Возможно, есть совпадение, но это не гарантируется, и, очевидно, это не было целью модуля.

Вы можете перефразировать вопрос, задавая себе. Какие функции / поведение мне действительно нужны, и делает ли glob.glob() то, что мне конкретно нужно? Скорее всего, это так.

Или я скорее ищу заявление о соответствии (даже сертификацию), потому что, например, проект / клиент / наша компания (по причинам, которые они знают (или не знают)) этого требуют. На что вам не повезло с glob.glob(), если вы не делаете одитинг / оформление документов самостоятельно или не нанимаете кого-либо для этого (обратите внимание, код для glob не такой большой). Вы также можете (даже если вы сказали, что не хотите) загружать glob(3) из libc.so с ctypes. Или заново внедрите его в Python с нуля (или на основе glob в этом отношении) с учетом требований совместимости. Что касается вопроса о возможных уже существующих альтернативах, я бы отложил это до дальнейших исследований и / или рекомендаций других.

...