【问题标题】:POSIX-compliant glob in PythonPython 中符合 POSIX 的 glob
【发布时间】:2018-06-29 08:48:00
【问题描述】:

我正在用 Python 实现 C 程序的一部分。该程序使用glob(3) 来查找与模式匹配的路径名。这是一个对应于glob(7) shell 内置函数的 C 函数。它们在 POSIX.2 中指定。

什么是 POSIX glob(3) 在 Python 中的等价物?

我查看了glob 标准模块,但我对文档感到担心:它在任何地方都没有提到 POSIX,使用模糊术语“shell-like”并且有一些非标准扩展,例如 wildstar ** 模式用于递归扩展。

如果我不使用recursive 标志,使用glob.glob 函数是否安全?

我的要求是:

  • 应该匹配glob(3)的结果,错误处理可能不同
  • 应该适用于 Python 2 和 Python 3
  • 仅需要 Linux 支持
  • 提到 PyPi 包的答案很好,我更喜欢可以审计和销售的较小的包。
  • 我可以使用 ctypes,但我正在寻找 Pythonic 解决方案

【问题讨论】:

  • 我认为您有责任确定glob.glob 是否足够。 Python 是开源的,您可以自行审核以确定它是否符合您的要求。
  • 感谢您的回复。我最终使用了 ctypes 但打开了一张票以查看 glob.glob 并最终切换到它。

标签: python posix glob


【解决方案1】:

看看 glob 是如何实现的,它不依赖于glob(3),所以它可能会产生相同的结果,但不能保证产生相同的结果。 POSIX 合规性也是如此(除了明显的扩展功能)。可能会有重叠,但不能保证,这显然不是模块背后的意图。

你基本上可以改写问自己的问题。我真正需要什么功能/行为,glob.glob() 是否满足我的特别需要?很有可能,确实如此。

或者我宁愿寻找合规声明(甚至是认证),因为例如项目/客户/我们的公司(出于只有他们知道(或不知道)的原因)需要它。对于glob.glob(),您不走运,除非您自己进行审计/文书工作或聘请某人来做(注意,glob 的代码不是那么大)。你也可以(即使你说你不想)从libc.soctypes 加载glob(3)。或者从头开始在 Python 中重新实现它(或者基于glob),同时考虑到兼容性要求。至于可能已经存在的替代方案,我会推迟到其他人的进一步研究和/或建议。

【讨论】:

  • 感谢您的回复。我最终使用了 ctypes。即使不方便,我对与C代码的兼容性更有信心。
猜你喜欢
  • 2016-05-24
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多