在node.js上使用spawn运行多个进程时出现乱序输出

时间:2016-02-06 20:07:28

标签: javascript node.js spawn

我正在使用spawn在节点中运行多个进程。这是我的代码:

var spawn = require('child_process').spawn;

var log_spawn = function (out) {
    process.stdout.write(out);
};

var exec_1 = spawn('command1', ['-args1');
exec_1.stdout.on('data', log_spawn);
exec_1.stderr.on('data', log_spawn);

var exec_2 = spawn('command2', ['-args2');
exec_2.stdout.on('data', log_spawn);
exec_2.stderr.on('data', log_spawn);

它工作正常,但输出无序。

例如,如果我在标准命令行中运行这两个命令,我会得到以下输出:

output_command1_line1
output_command1_line2
output_command2_line1
output_command2_line2

但是,当我使用带有spawn的节点时,我得到以下内容:

output_command1_line1
output_command2_line1
output_command1_line2
output_command2_line2

我可以做些什么来解决这个问题,以便按照常规命令行中的相同顺序查看消息?

1 个答案:

答案 0 :(得分:0)

command2command1完成之前开始运行,因此command1command2的输出是交错的。如果您希望在command2完成后启动command1,则可以在exit

上收听exec_1事件
var spawn = require('child_process').spawn;

var log_spawn = function (out) {
    process.stdout.write(out);
};

var exec_1 = spawn('command1', ['-args1');
exec_1.stdout.on('data', log_spawn);
exec_1.stderr.on('data', log_spawn);

exec_1.stderr.on('exit', function(exitcode) {
    var exec_2 = spawn('command2', ['-args2');
    exec_2.stdout.on('data', log_spawn);
    exec_2.stderr.on('data', log_spawn);
});