从 AWS lambda 上的 nodejs 调用 python - 权限被拒绝
call python from nodejs on AWS lambda - permission denied
我可以使用以下函数从 AWS Lambda 上的 nodejs 调用我的 python。但是,因为我需要特定的 python 库,所以我在 env 目录中创建了一个 virutalenv。我把所有东西都压缩起来然后推到 Lambda。但是,当我尝试从虚拟目录调用 python 时,出现权限被拒绝错误。
我试图在调用 python 之前修改 Lambda 上的 chmod 权限,但得到的是不允许操作。我怎样才能把它送到 运行?
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)"
]
}
试试这个:
exec('python district.py "'+ JSON.stringify(event) +'"', function(error, stdout) {
console.log('Python returned: ' + stdout + '.');
context.done(error, stdout);
});
Amazon 有关于在 Lambda here
中使用 Python 的教程
该错误很可能表明 python.exe
没有设置可执行位。但是请注意,即使您设置了 x 位,它也不会起作用:.exe
文件是 Windows 可执行文件,它们不会起作用。
Note, this virtual env was created in windows. I also attempted from Linux in the i.e. env/bin/python district.py
with no help.
env/bin/python
是正确的命令。如果您仍然收到权限被拒绝的错误,则表示文件 python
缺少可执行位。
在 AWS Lamba 运行时环境中,您不能更改文件的权限,也不能更改用户,因此您必须设置可执行位(或任何其他权限位您需要)在创建 .zip 存档时。
总结一下:
- 在 Linux 台机器上,使用 Linux 个可执行文件。
- 在创建存档之前设置可执行文件的可执行位。
我可以使用以下函数从 AWS Lambda 上的 nodejs 调用我的 python。但是,因为我需要特定的 python 库,所以我在 env 目录中创建了一个 virutalenv。我把所有东西都压缩起来然后推到 Lambda。但是,当我尝试从虚拟目录调用 python 时,出现权限被拒绝错误。
我试图在调用 python 之前修改 Lambda 上的 chmod 权限,但得到的是不允许操作。我怎样才能把它送到 运行?
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)"
]
}
试试这个:
exec('python district.py "'+ JSON.stringify(event) +'"', function(error, stdout) {
console.log('Python returned: ' + stdout + '.');
context.done(error, stdout);
});
Amazon 有关于在 Lambda here
中使用 Python 的教程该错误很可能表明 python.exe
没有设置可执行位。但是请注意,即使您设置了 x 位,它也不会起作用:.exe
文件是 Windows 可执行文件,它们不会起作用。
Note, this virtual env was created in windows. I also attempted from Linux in the i.e.
env/bin/python district.py
with no help.
env/bin/python
是正确的命令。如果您仍然收到权限被拒绝的错误,则表示文件 python
缺少可执行位。
在 AWS Lamba 运行时环境中,您不能更改文件的权限,也不能更改用户,因此您必须设置可执行位(或任何其他权限位您需要)在创建 .zip 存档时。
总结一下:
- 在 Linux 台机器上,使用 Linux 个可执行文件。
- 在创建存档之前设置可执行文件的可执行位。