Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新AWS Lambda文件的权限以使其可执行 概述: 我有一些C++代码( MyStudio),我想从lambda函数中执行。我已经在AmazonLinuxEC2实例上构建了代码,它在那里运行没有问题。 当我尝试从Lambda中的Python脚本运行它时,我收到以下错误消息:_Python_Amazon Web Services_Aws Lambda - Fatal编程技术网

更新AWS Lambda文件的权限以使其可执行 概述: 我有一些C++代码( MyStudio),我想从lambda函数中执行。我已经在AmazonLinuxEC2实例上构建了代码,它在那里运行没有问题。 当我尝试从Lambda中的Python脚本运行它时,我收到以下错误消息:

更新AWS Lambda文件的权限以使其可执行 概述: 我有一些C++代码( MyStudio),我想从lambda函数中执行。我已经在AmazonLinuxEC2实例上构建了代码,它在那里运行没有问题。 当我尝试从Lambda中的Python脚本运行它时,我收到以下错误消息:,python,amazon-web-services,aws-lambda,Python,Amazon Web Services,Aws Lambda,命令'LD_LIBRARY_PATH=/var/task/lib/var/task/myProgram-d'返回非零退出状态126.:CalledProcessError 从中可以看出,126表示该命令已找到,但不可执行。在我上传到Lambda之前它是可执行的,所以我不确定如何解决这个问题 编辑:感谢下面的评论,我仔细检查了Lambda实例的权限。事实上,文件上传后并没有标记为可执行文件。当我尝试用chmod更改它时,我得到一个错误只读文件系统 细节: 当我将其打包并上传到lambda函数时,目

命令'LD_LIBRARY_PATH=/var/task/lib/var/task/myProgram-d'返回非零退出状态126.:CalledProcessError

从中可以看出,126表示该命令已找到,但不可执行。在我上传到Lambda之前它是可执行的,所以我不确定如何解决这个问题

编辑:感谢下面的评论,我仔细检查了Lambda实例的权限。事实上,文件上传后并没有标记为可执行文件。当我尝试用
chmod
更改它时,我得到一个错误
只读文件系统

细节: 当我将其打包并上传到lambda函数时,目录结构如下所示:

  • handler.py
  • 我的计划
  • 解放党
    • (所需图书馆)
下面是
handler.py的代码

import os
import subprocess

exepath = os.path.join(os.getcwd(), 'myProgram')
libdir = os.path.join(os.getcwd(), 'lib')

def handler(event, context):
    command = 'LD_LIBRARY_PATH={}; {} -d'.format(libdir, exepath)
    return subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
如果我将
shell=True
更改为
shell=False
,则会收到不同的错误

[Errno 2]没有这样的文件或目录:“LD_LIBRARY_PATH=/var/task/lib/var/task/myProgram-d':FileNotFoundError

问题:
如何使
myProgram
可执行?由于雅克的提示和问题的答案,我在

中没有提到这个过程

我必须将
myProgram
复制到
/tmp
,然后
chmod
才能执行它

command = 'cp ./myProgram /tmp/myProgram; chmod 755 /tmp/myProgram; LD_LIBRARY_PATH={}; /tmp/myProgram -d '.format(libdir)
return subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)

777
许可证(
rwxrwxrwx
)是您“本地”确认的还是在Lambda服务器上确认的?如果不在Lambda上,您能否说服Lambda转储
myProgram
的权限?您可以转储可执行文件的用户和组以及尝试执行它的进程吗?(理论:(a)“上传到Lambda”权限混乱,无法执行。(b)在Lambda系统上运行全局可写可执行文件或在组/用户之外执行有一定的安全性)你是对的。我在本地检查了这些权限,并假设它们会被保留,但事实并非如此。在lambda实例上,它们是
rw-rw-r--
。现在。。。如何改变这一点?