【问题标题】:StringIO for directories: How to create in-memory directory in Python用于目录的 StringIO:如何在 Python 中创建内存目录
【发布时间】:2020-12-05 14:53:31
【问题描述】:

如何在python中创建内存目录,就像StringIO如何创建内存文件一样?

我正在尝试使用python-gnupg 验证文件的签名。我想在内存中创建一个gnupghome 目录,以便它安全(其他非根进程无法写入它)和短暂(当我.close() 它或我的python 应用程序关闭时消失)。

该解决方案需要与操作系统无关,因此它支持 linux、Windows 和 MacOS(请不要 subprocess 调用 mktemp -d)。

是否有一种原生的、跨平台的、pythonic 的方式来创建内存中的目录?

【问题讨论】:

  • StringIO 的一点是它支持的所有操作都是方法。这是有效的,因为 Python 文件对象是对象,它可以复制它们的 API。它根本不需要与文件系统交互。相比之下,Python 中没有“类目录对象”的概念。
  • 如果你想要一个内存目录,你将不得不在实际的文件系统中创建它。我不认为有一个很好的跨平台方法可以做到这一点,尤其是你想要的安全属性。
  • 你试过临时文件吗?您可以在 python 标准库文档中找到文档,它几乎可以满足您的所有需求:真实文件/目录、临时、受保护、跨平台

标签: python python-3.x gnupg in-memory stringio


【解决方案1】:

您可以使用 PyFilesystem 的 Memory Filesystem 创建内存文件系统。

也就是说,python-gnupg 的工作方式是将系统上的gpg 二进制文件脱壳。因此,gpg 无法访问由 python 创建的 in-memory-FS。

Morevoer,python-gnupg 的实现方式意味着它的函数将文件路径作为字符串。相反,如果它将文件描述符用于字节流,那么这可能会起作用。但事实并非如此。例如:

  • gpg.GPG()'s gnupghome 是一个字符串,它是实际磁盘上目录的路径
  • gpg.verify_file() 的第二个参数是一个字符串,它是分离签名的路径

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2012-10-01
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多