我正在使用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
我可以做些什么来解决这个问题,以便按照常规命令行中的相同顺序查看消息?
答案 0 :(得分:0)
command2
在command1
完成之前开始运行,因此command1
和command2
的输出是交错的。如果您希望在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);
});