spawn stdout输出内容不能同步显示
发布于 9 年前 作者 iahu 9467 次浏览 最后一次编辑是 8 年前 来自 问答

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’})

回到顶部