繁体   English   中英

node.js child_process.spawn no stdout除非'inherit'

[英]node.js child_process.spawn no stdout unless 'inherit'

我正在尝试从node.js (0.10.29)中的spawn ed 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

当ping没有pinginginheriting时stdout / stderr没有触发data事件的任何想法?

在控制台打印方面,在分块和缓冲方面已经有很多问题修复和功能改进。 由于问题不再具有可再现性,我认为这可能是由于当时节点的一个记录不足的行为,基于可用于打印的数据字节数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM