当 运行 多个进程在 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
我该怎么做才能解决此问题,以便我以与在常规命令行中看到的顺序相同的顺序查看消息?
command2
在 command1
完成之前开始 运行,因此 command1
和 command2
的输出是交错的。如果您希望 command2
在 command1
完成后开始,您可以在 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);
});
我正在使用 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
我该怎么做才能解决此问题,以便我以与在常规命令行中看到的顺序相同的顺序查看消息?
command2
在 command1
完成之前开始 运行,因此 command1
和 command2
的输出是交错的。如果您希望 command2
在 command1
完成后开始,您可以在 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);
});