【问题标题】:Python raspberry pi - how to treat RAM memory as a filePython raspberry pi - 如何将 RAM 内存视为文件
【发布时间】:2019-02-08 23:35:58
【问题描述】:

在 raspberry pi opencv python 上,我成功地从 USB cam 捕获图像,然后保存为“image.png”,然后将文件名传递给 smtp 客户端,该客户端读取文件并将其作为附件发送到电子邮件。显然这对 sd 卡不利...

如何将 RAM 区域视为文件?我可以流式传输数据吗?..

我现在不在家,但如果需要,我可以附上我目前尝试过的代码。

干杯

【问题讨论】:

  • 这对 SD 卡来说还不错 - 它只是意味着您正在使用它。你能详细说明你是如何创建文件的吗?根据您使用的库 - 您可能能够将数据保存到变量中并跳过整个文件系统。
  • 感谢 Shadow :) 考虑到我基本上是为视频流中的大量帧执行此操作。但无论如何,这不是一个优雅的解决方案,我宁愿在 ram 上做。所以文件是由 cv2.imwrite('myimage.png', img) 创建的,然后我面前没有代码,而是类似于 server.attach('myimage.png') ...我想我已经尝试过 server.attach(img) 并且它抱怨 img 没有读取属性......所以我正在查看 bytesIO 因为它允许我创建一个像对象一样的文件,它可以处理诸如查找和阅读......但到目前为止没有运气

标签: python file io ram


【解决方案1】:

您可以使用以下方法创建内存驱动器;

sudo mount ramfs <DIRECTORY> -t ramfs -o size=<SIZE>    

/ram 创建一个 16 兆字节内存驱动器的示例:

sudo mount ramfs /ram -t ramfs -o size=16M

如果这对您有用,并且您想确保每次启动 pi 时都会自动创建它,您需要更新您的 /etc/fstab


完成此操作后,您无需对代码进行任何架构更改。只需确保您的文件操作发生在此目录中即可。不用说,如果您出于任何原因重新启动 pi,您存储在此处的任何内容都会神奇地消失。

【讨论】:

  • 不幸的是,这对我不起作用,说它无法挂载 /data,没有 /data 文件夹,所以我创建了它,但我仍然收到相同的消息。然后我尝试修改 fstab 文件,它已经使我的 pi 崩溃了必须是一种将 ram 的某些区域视为文件的方法。(?)
  • 奇数。看到你尝试过的内容的记录会很有趣。但是没有——据我所知,没有这样的事情。您最好的选择(根据我的第一条评论)是找到一种使用 StringIO/BytesIO 的方法。
  • 我已经刷完卡,会发生这种情况: sudo mount ramfs /ram -t ramfs -o size=16M mount: mount point /ram does not exist 然后如果我创建 ram。 .. 即 mkdir ram,然后再试一次,我得到了完全相同的消息
  • 我无法重现这种情况...尝试重新启动?我想你也可以给 tmpfs 一个旋转(内存驱动器,但如果你使用太多内存,可以使用磁盘)
  • 所以解决方案是挂载一个内存驱动器,虽然命令略有不同,但我不得不使用 mkdir ram mkfs -q /dev/ram1 1024 mount /dev/ram1 ram .... 我有一段时间坚持尝试在 python 中创建一个 ram 文件,有几个示例说明如何将图像保存到字符串流但产生了 fileno() not supported 错误,以及从什么我可以发现这是一个错误...
猜你喜欢
  • 1970-01-01
  • 2022-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
相关资源
最近更新 更多