当 运行 多个进程在 node.js 上生成时出现乱序输出

Out of order output when running multiple processes with spawn on node.js

我正在使用 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

但是,当我将 node 与 spawn 一起使用时,我得到以下信息:

output_command1_line1
output_command2_line1
output_command1_line2
output_command2_line2

我该怎么做才能解决此问题,以便我以与在常规命令行中看到的顺序相同的顺序查看消息?

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

上监听 exit 事件
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);
});