如何使用 Python API 程序在 Docker 容器中的 运行 创建正确的文件路径?

How create a correct file path with a Python API program that is running inside a Docker Container?

我的 python 程序正在创建错误的文件路径。 形成的文件路径错误:'/autocameratest2\data\TestImages/7_vw_test.png' 正确的文件路径应该是:'/autocameratest2/data/TestImages/7_vw_test.png'

  The file path is fp = builtins.open(filename, "rb")
    FileNotFoundError: [Errno 2] No such file or directory: '/autocameratest2\data\TestImages/7_vw_test.png'
    172.17.0.1 - - [05/Feb/2022 17:34:22] "POST /places?camid=1&image1test=7_vw_test.png&image2perfect=5_vw_master.png HTTP/1.1" 500 -

在pythonapi程序中,下面URL http://127.0.0.1:5000/places?camid=1&image1test=7_vw_test.png&image2perfect=5_vw_master.png returns 一个 json 文件。该代码在 VisualStudio 代码或外部 docker 中运行良好。它 python 代码在 docker.

中给出了一个路径问题
image1test_path = os.path.join(IMAGE_FOLD_PATH,'autocameratest2\data\TestImages',image1test)
image2perfect_path = os.path.join(IMAGE_FOLD_PATH,'autocameratest2\data\TestImages',image2perfect)
test_results = generate_report(camid, image1test_path, image2perfect_path)
test_names = ['CamId','Blur','check_scale','noise','scrolled','allign','mirror','blackspots','ssim_score','staticlines','rotation_deg']

使用pathlib,python的路径解析库,有linux、windows类路径。您可以在它们之间自由操作。

你的问题是 docker 在 linux 上运行,除非另有说明,linux 使用 / 作为路径和 windows \,因此是问题所在。

pathlib.Path 会帮助你。

>>> import pathlib
>>> pathlib.Path("xxx/yyy\iii.z")
WindowsPath('xxx/yyy/iii.z')

以下方法帮助我创建了我想要的文件路径。像这样“/autocameratest2/data/TestImages”

image1test_path = os.path.join('data','TestImages',image1test)
image2perfect_path = os.path.join('data','TestImages',image2perfect)

我尝试构建路径的其他技术如下。这些都很好,虽然没有解决我的问题。

import pathlib
#image1test_path = pathlib.Path.cwd().joinpath('data', 'TestImages', args.image1test)
#image2perfect_path = pathlib.Path.cwd().joinpath('data', 'TestImages', args.image2perfect)

#image1test_path = pathlib.Path('data', 'TestImages', args.image1test)
#image2perfect_path = pathlib.Path('data', 'TestImages', args.image2perfect)