node.js child_process.spawn没有标准输出,除非“inheritance”

我试图从node.js (0.10.29)捕获spawn child_process stdout。

现在我只是试着用ping

下面的代码不打印(但是ping)

 var exec = require('child_process').exec; var spawn = require('child_process').spawn; var util = require('util') var ping = spawn('ping', ['127.0.0.1'], {stdio: 'pipe'}); ping.stdout.on('data', function(data){ util.print(data); }) ping.stderr.on('data', function(data){ util.print(data); }) 

如果我改变stdio: 'pipe'stdio: 'inherit'并摆脱stdout/stderr钩子如下:

 var ping = spawn('ping', ['127.0.0.2'], {stdio: 'inherit'}); // ping.stdout.on('data', function(data){ // util.print(data); // }) // ping.stderr.on('data', function(data){ // util.print(data); // }) 

我明白了

 PING 127.0.0.2 (127.0.0.2): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 

如果我将地址从127.0.0.2更改为127.0.0.1 ,我知道它将响应ping并使用原始代码

 PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.060 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.063 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.152 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.124 ms 

任何想法为什么stdout / stderr不发射data事件时ping不pinginginheriting

已经有很多问题修复以及在控制台打印方面的function改进,在分块和缓冲方面。 由于这个问题没有更多的可重复性,所以我认为这可能是由于当时节点的logging不足的行为之一,基于有多less字节的数据可用于打印。

由于这个问题仍然是开放的,所以我会要求发起者看看你是否对这个解释感到满意,或者正在寻找更具体的解释,这种情况下,我需要在所述的节点版本中重现这一点,并进一步debugging。