spawn stdout输出内容不能同步显示
hi,大家好。 最近在搞omxplayer的时候发现,我对子进程的操作不能及时的输出反馈消息,而是在我结束父进程时才全部一次性显示出来。stdout消息没有同步显示出来。但是别的命令好像没有这种问题。请问大家有碰到过这种情况的吗?谢谢
var player = cp.spawn('omxplayer', [item.url]);
stdin.setRawMode(true);
stdin.resume();
stdin.pipe(player.stdin);
player.stderr.pipe(process.stderr);
player.stdout.on('data', function (data) {
// 这里的log不会及时的输出到屏幕上
console.log('player stdout',data.toString());
});
6 回复
没有回复,我再贴一下log吧。
输入-
,正常应该会回显Current Volume: -3.00dB
之类的信息,但是现在只有当ctrl+c结束进程后,omxplayer的消息才会一口气输出。
-
-
-
layer stdout Audio codec mp3 channels 2 samplerate 44100 bitspersample 16
Subtitle count: 0, state: off, index: 1, delay: 0
Current Volume: -3.00dB
Current Volume: -6.00dB
Current Volume: -9.00dB
Stopped at: 00:00:10
have a nice day ;)
是这样的,子进程结束以后回调函数才会执行
不知道你这个具体是怎么写的,cp的定义在哪
var spawn = require('child_process').spawn;
var b = spawn('node',['array.js']);
b.stdout.on('data',function (data){
console.log('out',data.toString());
});
b.stderr.on('data',function (data){
console.log('err',data);
});
b.on('close',function (code){
console.log('close',code);
});
我写的这个例子中是能够得到实时输出的
spawn一般来说是能够实时得到回复的
@wfsovereign var cp = require('child_process'), stdin = cp.stdout;
其实player是会在后台监听用户输入的,这里的问题是,player监听到了用户的输入(通过 stdin.pipe(player.stdin);
),却没有及时地把stdout显示出来。player初始化的信息是会显示出来的。
直接 spawn(cmd, [args], {stdio: ‘inherit’})