我可以使用以下函数从AWS Lambda上的nodejs调用我的python。但是,因为我需要特定的python库,所以我在env目录中创建了一个virutalenv。我把所有东西拉上拉链然后推到Lambda。但是当我尝试从虚拟目录调用python时,我得到一个Permission Denied错误。
我尝试在调用python之前修改Lambda上的chmod权限,但是获得了Operation Not Permitted。我怎么能让它运行?
console.log('Loading event');
var exec = require('child_process').exec;
exports.handler = function(event, context) {
exec('env/bin/python district.py \'' + JSON.stringify(event) + '\'', function(error, stdout) {
var obj = stdout.toString();
context.done(error, obj);
});
};
这是错误:
{
"errorMessage": "Command failed: /bin/sh: env/bin/python: Permission denied\n",
"errorType": "Error",
"stackTrace": [
"",
"ChildProcess.exithandler (child_process.js:658:15)",
"ChildProcess.emit (events.js:98:17)",
"maybeClose (child_process.js:766:16)",
"Process.ChildProcess._handle.onexit (child_process.js:833:5)"
]
}
答案 0 :(得分:0)
试试这个:
exec('python district.py "'+ JSON.stringify(event) +'"', function(error, stdout) {
console.log('Python returned: ' + stdout + '.');
context.done(error, stdout);
});
亚马逊有一个关于在Lambda here
中使用Python的教程答案 1 :(得分:0)
该错误很可能表示python.exe
没有设置可执行位。但请注意,即使您设置了x位,它也不起作用:.exe
文件是Windows可执行文件,它们不起作用。
注意,这个虚拟环境是在windows中创建的。我也尝试从
env/bin/python district.py
中的Linux中没有任何帮助。
env/bin/python
是正确的命令。如果仍然出现Permission Denied错误,则表示文件python
缺少可执行位。
在AWS Lamba运行时环境中,您不能更改文件的权限,也不允许更改用户,因此您必须设置可执行位(或您需要的任何其他权限位)创建.zip存档时。
总结一下: