gpt4 book ai didi

javascript - 在 aws lambda 上使用 child_process spawn 作为 python 脚本

转载 作者:行者123 更新时间:2023-11-30 20:26:44 24 4
gpt4 key购买 nike

我正在尝试通过 child_process.spawn 系统使用我的 javascript 文件运行 python 脚本,但它似乎永远不会在 aws lambda 上运行。

相关代码是:

getEntities: function (){
var spawn = require('child_process').spawn;
var py = spawn('python', ['mainPythonFile.py']);
var outputString = "starting string";

console.log("BEFORE ANY INPUT");
py.stdout.on('data', function (data) {
console.log("----Getting information from the python script!---");
outputString += data.toString();
console.log(outputString);
});

py.stdout.on('end', function (){
console.log("===hello from the end call in python files===");
console.log("My output : " + outputString);
});
console.log("NO INPUT CHANGED??");

return outputString;

}

这些文件在文件夹结构的同一级别(表面级别)。

正在运行的 python 文件非常简单,只包含一些打印语句:

主Python文件:

import sys;
print("Hello There");
print("My name is Waffles");
print("Potato Waffles");
sys.stdout.flush()

我从 aws 服务得到的输出是这样的:

BEFORE ANY INPUT
NO INPUT CHANGED??
starting string

我尝试了不同的路径来尝试访问 python 文件,例如*mainPythonFile.py ./mainPythonFile.py

我认为代码似乎没问题,因为它可以在我的本地机器上运行,但是试图让它在 AWS 上运行有一个我无法理解的微妙之处。

如果需要,我可以提供任何其他信息。

注意:“getEntities”函数正在被另一个 node.js 文件调用,但我将代码移至调用函数,我得到了相同的结果。

最佳答案

由于 JS 的异步特性,正如 Chris 所解释的,函数在实际调用派生线程中的“end”之前到达“return”语句。

这意味着代码从未有机会实际设置正确的输出文本。

我更改了我的函数调用以接受回调,然后当程序用信息回复时回调会响应。

我的新功能稍微改成了这个(没有打印):

getEntities: function(callbackFunction, that){
var spawn = require('child_process').spawn;
var py = spawn('python', ['mainPythonFile.py']);
var outputString = "starting string";

py.stdout.on('data', function (data) {
outputString += data.toString();
});
// that = "this == alexa" that's passed in as input.
py.stdout.on('end', function (){
callbackFunction(outputString, that);
});

调用此函数的函数如下:

HelperFunctions.getEntities(function(returnString,that){
that.response.speak(returnString);
that.emit(':responseReady');
}, this);

我敢肯定有一种更漂亮的方法可以做到这一点,但目前看来还行得通。感谢 ChrisG

关于javascript - 在 aws lambda 上使用 child_process spawn 作为 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50826884/

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