nodejs子进程多次执行

时间:2015-04-23 14:48:02

标签: node.js child-process

我使用node子进程执行python进程得到一个url。问题是我正在多次运行该进程,即使只是一次访问该网址。

enter image description here

以下是代码:

server.get('/', function(req, res, next) {
  console.log('spawning process');
  var child = exec('python reporter.py', function(error, stdout, stderr) {
    if (error || stderr) return console.log(error, stderr);
    var data = JSON.parse(stdout);
    console.log('Process ready');
  });
});

2 个答案:

答案 0 :(得分:2)

有可能无论您使用什么来发送GET响应,都会在没有得到响应时重试该请求。所以做出回应:

e.g。

server.get('/', function(req, res, next) {
  console.log('spawning process');
  var child = exec('python reporter.py', function(error, stdout, stderr) {
    if (error || stderr) return console.log(error, stderr);
    var data = JSON.parse(stdout);
    console.log('Process ready');
    res.status(200).send()
  });
});

答案 1 :(得分:0)

对于在最新版本的节点中面临相同问题的任何人:

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

ls.stderr.on('data', (data) => {
    console.error(`stderr: ${data}`);
});

ls.on('close', (code) => {
    console.log(`child process exited with code ${code}`);
 });

按照 nodejs.org

//在“数据”中捕获数据,然后尝试将响应置于“关闭”位置。   完成所有数据处理后,将执行关闭。