如何等待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);