我正在用 Python 实现 C 程序的一部分。该程序使用glob(3)查找与模式匹配的路径名。这是对应于 glob(7) 的 C 函数外壳内置。它们在 POSIX.2 中指定。
Python 中 POSIX glob(3)
的等价物是什么?
我查看了 glob标准模块,但我对文档感到担心:它在任何地方都没有提到 POSIX,使用模糊术语“类似 shell”,并且有一些非标准扩展,例如用于递归扩展的 wildstar **
模式。
如果我不使用recursive
标志,使用glob.glob
函数是否安全?
我的要求是:
- 应与
glob(3)
的结果匹配,错误处理可能有所不同 - 应该适用于 Python 2 和 Python 3
- 仅需要 Linux 支持
- 提到 PyPi 软件包的答案很好,我更喜欢可以审核和销售的较小软件包。
- 我可以使用 ctypes,但我正在寻找 Pythonic 解决方案
最佳答案
看看 glob 的实现方式,它不依赖于 glob(3)
,因此可能会产生相同的结果,但不能保证产生相同的结果。 POSIX 合规性也类似(除了明显的扩展功能之外)。可能存在重叠,但不能保证,这显然不是该模块背后的意图。
您基本上可以重新表述自己问的问题。我真正需要哪些功能/行为,以及 glob.glob()
是否满足我的具体需要?很有可能,确实如此。
glob.glob()
,除非您自己进行审计/文书工作或雇用某人来完成(注意,glob
的代码是没那么大)。您还可以(即使您说过您不想)使用 ctypes
从 libc.so
加载 glob(3)
。或者从头开始用 Python 重新实现它(或基于 glob
),同时考虑到兼容性要求。至于可能已经存在的替代方案,我会推迟到其他人的进一步研究和/或建议。
关于python - Python 中符合 POSIX 标准的 glob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51097773/