【问题标题】:How can I create a ramdisk in Python?如何在 Python 中创建 ramdisk?
【发布时间】:2011-05-20 01:25:53
【问题描述】:

我想用 Python 创建一个 ramdisk。我希望能够以跨平台的方式执行此操作,因此它可以在 Windows XP-to-7、Mac 和 Linux 上运行。我希望能够像普通驱动器一样读取/写入 ramdisk,最好使用驱动器号/路径。

我想要这个的原因是为创建具有特定结构的目录的脚本编写测试。我想完全在 ramdisk 中创建目录,所以我会确保在测试结束后它会被完全删除。我考虑使用 Python 的tempfile,但如果测试将在中间停止,则目录可能不会被删除。我想完全确定它是否已被删除,即使有人在测试过程中拔掉了电脑上的插头。

【问题讨论】:

  • 我相当怀疑没有简单的跨平台方法可以做到这一点,因为每个操作系统处理安装的方式不同。不过,这个问题非常有趣!
  • "如果测试将在中间停止,目录可能不会被删除" 你有任何证据吗?这与文档相矛盾。
  • @S.Lott 我想如果测试没有(有机会)自行清理。在这种情况下,我会争辩:为什么不简单地让测试设置确保一个干净的状态(如果需要,可能删除目录),而不管现有状态如何?
  • @pst:文件在关闭时被删除。测试中没有“清理”——删除是文件操作系统定义的一部分。与任何应用软件无关。
  • @S.Lott:“mkdtemp() 的用户负责删除临时目录及其内容。”来自 Python 的 tempfile 文档。

标签: python unit-testing cross-platform temporary-files ramdisk


【解决方案1】:

PyFilesystem 怎么样?

https://docs.pyfilesystem.org/en/latest/reference/memoryfs.html

https://docs.pyfilesystem.org/en/latest/reference/tempfs.html

缺点是你必须使用 PyFilesystem API 访问文件系统,但你也可以使用 PyFilesystem 访问真正的 fs。

【讨论】:

【解决方案2】:

因为文件和目录处理是如此低级且依赖于操作系统,我怀疑任何像你想要的东西是否存在(或者甚至是可能的)。您最好的选择可能是实现一组类似于“虚拟”文件系统的函数、类和方法,以跟踪创建的文件和目录层次结构及其内容。

此类仿真中的可调用对象需要与应用程序使用的各种 Python 标准内置插件和模块中的对应对象具有相同的签名并返回相同的值。

我怀疑这可能不像听起来那么有效——模拟标准的 Python 文件系统接口——这取决于你实际使用了多少,因为你不一定要模仿所有这些.此外,如果使用 Pure Python™ 编写,它还具有可移植性,易于维护和增强。

【讨论】:

  • 有诸如fs之类的python模块几乎可以做到这一点,但是由于很难包装操作系统,它们提供了自己的接口,该接口不匹配,但所有操作都作为对象上的方法
  • 你说得对,我误读了你的建议。现在删除我之前的评论,以防止误导其他人。
【解决方案3】:

一种选择可能是注入(猴子补丁)修改版本的 os 模块中使用的方法以及写入 StringIO 文件而不是磁盘的内置函数 openfile。显然,这种替换应该只发生在被测试的模块上;

【讨论】:

  • 就我而言,这无济于事,因为我的脚本会创建目录。
  • 有趣...我将如何“虚拟化”os.mkdir
  • 也许使用模拟库?
【解决方案4】:

请阅读:

http://docs.python.org/library/tempfile.html#tempfile.TemporaryFile

"返回一个类似文件的对象,可以 用作临时存储区。这 文件是使用 mkstemp() 创建的。它 将尽快销毁 关闭(包括隐式关闭 当对象是垃圾时 收集)。”

这一切都为您处理。什么都不做,它已经起作用了。

【讨论】:

  • 正如我在问题中所说,我需要创建目录,而不仅仅是文件。从您的链接:“mkdtemp() 的用户负责删除临时目录及其内容。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2023-02-09
  • 2017-04-12
  • 2019-12-09
  • 2020-11-12
  • 1970-01-01
相关资源
最近更新 更多