我正在尝试使用我的javascript文件通过孩子运行一个python脚本_进程.spawn系统,但它似乎从未在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文件非常简单,只包含一些print语句:
main pythonfile:
^{pr2}$我从aws服务得到的输出是:
BEFORE ANY INPUT
NO INPUT CHANGED??
starting string
在尝试访问python文件时,我尝试了不同的路径,例如
*mainPythonFile.py
./mainPythonFile.py
等
我认为代码似乎很好,因为它可以在我的本地机器上运行,但有一个微妙之处,就是试图让它在AWS上运行,我无法理解。在
如果需要,我可以提供任何其他信息。在
注意:“getEntities”函数正在被另一个调用节点.js文件,但我把代码移到调用函数,得到了相同的结果。在
由于JS的异步特性,正如Chris所解释的,函数在实际调用派生线程中的“end”之前到达“return”语句。在
这意味着代码从来没有机会实际设置正确的输出文本。在
我改变了我的函数调用以接受一个回调,然后当程序用信息进行回复时,该回调就会响应。在
我的新功能稍微改成了这个(没有指纹):
调用此函数的函数现在如下所示:
^{pr2}$我相信有一个更好的方法来做这件事,但这似乎是目前有效的。多亏了克里斯格
相关问题 更多 >
编程相关推荐