在节点js=>;中调用python脚本;错误\u HTTP\u头\u已发送

在节点js=>;中调用python脚本;错误\u HTTP\u头\u已发送,python,node.js,Python,Node.js,我在一个节点js项目中调用python脚本。问题是,它只显示部分输出,服务器会删除错误ERR\u HTTP\u HEADERS\u SENT 你好,派伊 import sys for i in range(3000): print(i) sys.stdout.flush() index.js const express = require('express') const app = express() const bodyParser = require('body-parser')

我在一个节点js项目中调用python脚本。问题是,它只显示部分输出,服务器会删除错误ERR\u HTTP\u HEADERS\u SENT

你好,派伊

import sys
for i in range(3000):
    print(i)
sys.stdout.flush()
index.js

const express = require('express')
const app = express()
const bodyParser = require('body-parser')


app.set('view engine', 'ejs')
app.use(bodyParser.urlencoded({ limit: '10mb', extended: false }))

app.get("/", (req, res) => {
    const spawn = require("child_process").spawn
    const pythonProcess = spawn('python', ["./hello.py"])
    pythonProcess.stdout.on('data', (data) => {
        results = data.toString().split("\r\n")
        res.render("../index.ejs", {results})
    })
})

app.listen(process.env.PORT || 3000)
index.ejs

<h2>Results:</h2>
<% results.forEach(result => { %>
    <div><%= result %> </div>
<% }) %>
结果:
{ %>

结果是页面上的数字从0到1550,每一行都是独立的,但它应该是0到3000,怎么了?

这是因为
数据实际上是一个流,它的输出被逐段读取为数据块,这意味着监听器
打开(“数据”…
被多次触发;每次接收到块时

为了得到完整的结果,我们必须等到收到所有碎片,下面是如何:

router.get('/', (req, res) => {
  const pythonProcess = spawn('python', ['./hello.py']);
  let result = [];

  // this listener will keep triggering until all chunks are received
  pythonProcess.stdout.on('data', data => {
    result = result.concat(data.toString().split('\r\n'));
  });
  // on.exit() will indicate that process has finished
  pythonProcess.on('exit', code => {
    console.log(`process has finished and exited with code: ${code}`);
    res.render('../index.ejs', { result });
  });
});
希望我能帮上忙