如何在 Azure IoT 边缘模块中读写文件

How to read and write a file in Azure IoT edge module

我正在尝试在 IoT 边缘模块中以编程方式读取和写入文件。

场景:

我在我的目录中本地创建了一个文件,我正在尝试通过 python 代码读取和写入,如下所示:

  lines = open(my_file_name, 'r').readlines()
  print("LINES")
  print(lines)
  lines[line_num] = text # Modifying a line to check if the changes persist
  out = open(my_file_name, 'w')
  out.writelines(lines)
  out.close()

问题是,当模块在模拟器(本地)上运行时,它会正确读取文件,但在写入时它不会写入该特定文件。如果它可以读取该文件,它应该能够写入该文件。可能是由于模拟器通过 docker 容器运行,因此它将文件写入容器,而我在本地 Visual studio 代码编辑器中看不到这些更改。这似乎是合理的解释,但仍然不确定。任何帮助表示赞赏!

您需要使用 docker 卷,在您的 iotedge 模块的创建选项中提供它。

正如 Philip 提到的,您需要使用 deployment.template.json 文件中的 createOptions 将主机目录挂载到容器中。我还没有找到关于如何执行此操作的良好 IoTEdge 相关文档。通过在模块的创建选项上设置绑定挂载,我成功完成了这项任务。使用 Windows,它看起来像这样

    "modules": {
      "ExtrusionDataCapture": {
        "version": "1.0.0",
        "type": "docker",
        "status": "running",
        "restartPolicy": "always",
        "settings": {
          "image": "${MODULEDIR<../ExtrusionDataCapture>}",
          "createOptions": {
            "HostConfig": {
              "Mounts": [
                {
                  "Type": "bind",
                  "Source": "C:\extrusion",
                  "Target": "C:\iotdata",
                  "RW": true,
                  "Propagation": "rprivate"
                }
              ]
            }
          }
        }
      }
    }

https://docs.docker.com/engine/api/v1.32/#operation/ContainerCreate