python - Python 中符合 POSIX 标准的 glob

标签 python posix glob

我正在用 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 的代码是没那么大)。您还可以(即使您说过您不想)使用 ctypeslibc.so 加载 glob(3)。或者从头开始用 Python 重新实现它(或基于 glob),同时考虑到兼容性要求。至于可能已经存在的替代方案,我会推迟到其他人的进一步研究和/或建议。

关于python - Python 中符合 POSIX 标准的 glob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51097773/

相关文章:

python - REST API POST 请求导致 AttributeError : 'bytes' object has no attribute 'items'

python - ZMQ 删除旧消息

python - 使用 distutils 时查找 vcvarsall.bat 时出现问题

iphone - 获取低级 iPhone 网络信息

python - 什么是 glob2 模块?

python - 在PYTHON中将多个文件读入单独的数据帧

python - 在 set 的子类上调用 super().__repr__() 时出现意外行为?

c - 将 POSIX C 代码移植到 Windows

c++ - vswprintf 崩溃

c++ - 如何使用正则表达式在 C/C++ (Linux) 中执行 glob