gpt4 book ai didi

python - 无法从 python aws lambda 函数中运行二进制文件

转载 作者:太空狗 更新时间:2023-10-29 20:44:43 25 4
gpt4 key购买 nike

我正在尝试在 lambda 函数中运行此工具:https://github.com/nicolas-f/7DTD-leaflet

该工具依赖于 Pillow,它依赖于 AWS lambda 容器中不可用的镜像库。为了尝试解决这个问题,我运行了 pyinstaller 来创建一个我希望可以执行的二进制文件。此文件名为 map_reader,位于 lambda zip 包的顶层。

下面是我用来尝试运行该工具的代码:

command = 'chmod 755 map_reader'
args = shlex.split(command)
print subprocess.Popen(args)

command = './map_reader -g "{}" -t "{}"'.format('/tmp/mapFiles', '/tmp/tiles')
args = shlex.split(command)
print subprocess.Popen(args)

这是错误,发生在第二次 subprocess.Popen 调用时:

<subprocess.Popen object at 0x7f08fa100d10>
[Errno 13] Permission denied: OSError

我怎样才能正确运行它?

最佳答案

您可能被误导了问题的实质。

我不认为第一个 Popen 运行成功。我认为它只是在标准错误中转储了一条消息,而您没有看到它。大概是这么说的

chmod: map_reader: No such file or directory

我建议您可以尝试以下两种方法之一:

  1. 从包中提取 map_reader 到/tmp。然后用 /tmp/map_reader 引用它.
  2. 按照 AWS Lambda 总经理 Tim Wagner 的建议进行操作,他在文章 Running Arbitrary Executables in AWS Lambda 中说了以下内容:

Including your own executables is easy; just package them in the ZIP file you upload, and then reference them (including the relative path within the ZIP file you created) when you call them from Node.js or from other processes that you’ve previously started. Ensure that you include the following at the start of your function code:

process.env[‘PATH’] = process.env[‘PATH’] + ‘:’ + process.env[‘LAMBDA_TASK_ROOT’]

上面的代码是针对 Node JS 的,但是对于 Python 来说,就像下面这样

import os
os.environ['PATH']

这应该使命令 command = './map_reader <arguments>工作。

如果它们仍然不起作用,您还可以考虑运行 chmod 755 map_reader 创建包并上传它之前(按照建议 in this other question )。

关于python - 无法从 python aws lambda 函数中运行二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41651134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com