如何在 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
我正在尝试在 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