如何等待subprocess在Node.js中完成?

我正在通过Node.js中的subprocess运行Python脚本,如下所示:

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

但是Node不会等待它完成。 我该如何等待这个过程呢?

编辑:是否有可能通过在我从主脚本调用的模块中运行subprocess来做到这一点?

你应该使用exec-sync

这可以让你的脚本等待你执行完成

真的好用:

 var execSync = require('exec-sync'); var user = execSync('python celulas.py'); 

看看: https : //www.npmjs.org/package/exec-sync

使用exit事件的subprocess。

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

PS:这不是真的重复,因为除非你确实需要它,否则你不想使用同步代码。

您需要删除侦听器exec安装以添加到缓冲的stdout和stderr,即使您没有传递callback,它仍会缓冲输出。 在这种情况下,节点仍然会退出缓冲区中的subprocess。

 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);