Home » Nodejs » How to wait for a child process to finish in Node.js?

How to wait for a child process to finish in Node.js?

Posted by: admin November 30, 2017 Leave a comment

Questions:

I’m running a Python script through a child process in Node.js, like this:

require('child_process').exec('python celulas.py', function (error, stdout, stderr) {
    child.stdout.pipe(process.stdout);
});

but Node doesn’t wait for it to finish. How can I wait for the process to finish?

EDIT: Is it possible to do this by running the child process in a module I call from the main script?

Answers:

You should use exec-sync

That allow your script to wait that you exec is done

really easy to use:

var execSync = require('exec-sync');

var user = execSync('python celulas.py');

Take a look at:
https://www.npmjs.org/package/exec-sync

Questions:
Answers:

Use exit event for the child process.

var child = require('child_process').exec('python celulas.py')
child.stdout.pipe(process.stdout)
child.on('exit', function() {
  process.exit()
})

PS: It’s not really a duplicate, since you don’t want to use sync code unless you really really need it.

Questions:
Answers:

You need to remove the listeners exec installs to add to the buffered stdout and stderr, even if you pass no callback it still buffers the output. Node will still exit the child process in the buffer is exceeded in this case.

var child = require('child_process').exec('python celulas.py');
child.stdout.removeAllListeners("data");
child.stderr.removeAllListeners("data");
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);