【发布时间】:2019-06-11 15:31:20
【问题描述】:
如here 所述,可以从 Node.js Lambda 函数运行非 Node.js 可执行文件。
拥有 Node.js Lambda 函数我想使用 Node.js 的 child_process 命令运行 Python 脚本。
我遵循this AWS 教程并在我的 .js 函数的开头包含以下内容:
process.env[‘PATH’] = process.env[‘PATH’] + ‘:’ + process.env[‘LAMBDA_TASK_ROOT’];
主要的 Python 脚本调用从这里开始:
const { spawn } = require('child_process');
function calculateSomething(next) {
var script = spawn('python', ['my_python_script.py', args]);
script.stdout.on('data', (data) => { doSomething(data); });
script.on('error', (error) => { console.error(error); });
script.on('exit', () => { next(); });
}
Python 脚本使用外部库(例如 numpy)运行,所以我必须使用 pip 安装它。
现在:
- 如何在 Node.js Lambda 中安装 pip 库?
- 将我的 Python 脚本与 Node.js 函数链接以在我的 .js 函数的开头添加此
process.env[‘PATH’] = process.env[‘PATH’] + ‘:’ + process.env[‘LAMBDA_TASK_ROOT’];是否足够?
类似于this其他问题。
【问题讨论】:
-
你可以从 node.js 的 lambda 函数中调用另一个基于 python 的 lambda 函数吗?
-
@NiroshanRanapathi 如果可能的话,我宁愿不创建另一个 Lambda 并在同一个函数上运行 Python 脚本。顺便说一句,如果该解决方案使其运行得更快,我会考虑这一点。谢谢!
-
嗯,AWS 常见问题的深入阅读表明,事实上,这是可能的: 问:我可以从用 Node.js 编写的 AWS Lambda 函数中执行其他程序吗?是的。 Lambda 的内置沙箱允许您运行批处理(“shell”)脚本、其他语言运行时、实用程序例程和可执行文件。 aws.amazon.com/blogs/compute/running-executables-in-aws-lambda
-
我认为 python 可用的事实只是因为有一个通用的 Amazon Linux 基线。如果您尝试在 python 运行时 lambda 中查找“节点”,它将不存在(在 python 3.7 上测试)
-
刚刚在节点 JS 12 运行时测试,似乎他们现在删除了 python,这失败了
spawn('python', ['--version']);和Error: spawn python ENOENT。文章只提到了运行其他可执行文件,但 runtime 和 exec 都是针对节点的。
标签: python node.js aws-lambda