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

David picture David · Mar 11, 2014 · Viewed 46.6k times · Source

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?

Answer

alex picture alex · Mar 13, 2014

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.