Javascript node.js child_process.spawn除非';继承';

Javascript node.js child_process.spawn除非';继承';,javascript,node.js,stdout,stderr,child-process,Javascript,Node.js,Stdout,Stderr,Child Process,我试图从node.js(0.10.29)中的spawnedchild\u进程中捕获标准输出 现在我正在尝试使用ping 以下代码不打印(但会ping) 如果我将stdio:'pipe'更改为stdio:'inherit'并去掉stdout/stderr钩子,如下所示: var ping = spawn('ping', ['127.0.0.2'], {stdio: 'inherit'}); // ping.stdout.on('data', function(data){ // util.pr

我试图从
node.js
(0.10.29)中的
spawn
ed
child\u进程中捕获标准输出

现在我正在尝试使用
ping

以下代码不打印(但会ping)

如果我将
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);
// })
我明白了

如果我将地址从
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

你知道为什么当ping不是
ping或
继承时,stdout/stderr没有触发
数据
事件吗

关于控制台打印,在分块和缓冲方面,已经有很多问题修复和功能改进。由于该问题不再具有可复制性,我假设这可能是由于then节点的一个未充分记录的行为造成的,这取决于可用于打印的数据字节数


由于这个问题仍然悬而未决,我想请发起者看看您是否对这个解释感到满意,或者正在寻找更具体的解释,在这种情况下,我需要在所述版本的node中复制这个解释并进一步调试。

您所说的“不打印(但ping)”是什么意思`
ping
进程运行并ping localhost,但是节点程序没有打印到stdout。但是我复制了您的代码,我认为它工作正常。即使使用console.log。基本上,我已经缩小了范围——在某些情况下,节点在进程完成之前似乎不会获得标准输出——在其他情况下,它可以获得实时更新。不确定这两者之间的区别是什么。它实际上在最新的节点版本中运行良好。也许,你最好更新你的!
PING 127.0.0.2 (127.0.0.2): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
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