首页 > 解决方案 > Node.js 子进程正确捕获 python 输出,除非输出出现在特定方法之后

问题描述

我正在尝试运行 python 脚本,并使用 Node/Express 中的以下代码收集发送到控制台的打印输出:

app.post("/compute", (req, res) => {
   var data = req.body.mat;
   const value = runScript(data);
   value.stdout.on("data", (data) => {
      console.log(data.toString());
   });
});

function runScript(data) {
   return spawn("python", [
      "-u",
      path.join(__dirname, "scripts/guess.py"),
      "--data",
      data,
   ]);
}

它运行以下 python 脚本(简化):

def main(argv):
   opt, data = argv
   model.load_state_dict(torch.load("model.pt")
   print("Output")

if __name__ == "__main__":
   main(sys.argv[1:])

python 脚本在终端中使用python guess.py --data 0010100101000. Node/Express 做的正是它应该做的,除非 python 代码中的 print 语句在 line 之后model.load_state_dict(torch.load("model.pt"))。当 print 语句位于此行之前时,Node 代码会正确捕获 python 输出。

这是否与该方法花费的时间太长以及 Node 代码不再捕获新的标准输出有关?或者它是否与访问另一个文件的python代码有关,弄乱了标准输出?任何帮助,将不胜感激。

标签: javascriptpythonnode.jsexpress

解决方案


我发现这一行引发了错误,因为当我从终端运行脚本与节点代码时,当前工作目录不同。我刚刚编辑了传递给该方法的路径。


推荐阅读