【发布时间】:2018-06-12 22:48:39
【问题描述】:
我正在尝试通过 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文件非常简单,只包含一些打印语句:
MainPythonFile:
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 文件调用,但我将代码移至调用函数,得到相同的结果。
【问题讨论】:
-
data和end事件将在您的代码命中return outputString;后发生 long -
@ChrisG 你能给我一些关于如何解决这个问题的建议吗?我假设数据和结束事件正在工作,因为这适用于我的本地机器。
-
它们“工作”的意思是您可以看到控制台输出,但不是因为您的函数实际上返回的不是
"starting string"。你想对实际输出做的任何事情都必须在end回调中发生;你不能像你尝试的那样从函数中返回它。 -
@ChrisG 我刚刚测试了我的代码,发现你是对的。我将编辑我的问题来解释这一点。谢谢
标签: javascript python node.js amazon-web-services child-process