javascript - 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代码有关,弄乱了标准输出?任何帮助,将不胜感激。
解决方案
我发现这一行引发了错误,因为当我从终端运行脚本与节点代码时,当前工作目录不同。我刚刚编辑了传递给该方法的路径。
推荐阅读
- java - 在某些情况下我应该如何使用模拟?
- figma - 如何使用 figma rest api 将元素导出为 PNG 或 JPEG?
- java - 使用一个默认值Guice 多个连接
- javascript - 检查递归js中的数字是否不是整数
- python - Python在正文中缺少数据
- c# - 如何为没有具体类型但有接口的参数赋予默认值
- shell - 如何在shell脚本中打印两个单词之间的内容?
- javascript - 上传json文件并在angualr 8中读取
- angular - 如何在材料日历中防止今天之前的日期?(角度 9)
- regex - 正则表达式基于两个字符串查找匹配项,而不考虑序列