[英]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没有pinging
或inheriting
时stdout / stderr没有触发data
事件的任何想法?
在控制台打印方面,在分块和缓冲方面已经有很多问题修复和功能改进。 由于问题不再具有可再现性,我认为这可能是由于当时节点的一个记录不足的行为,基于可用于打印的数据字节数。
由于这个问题仍然存在,我会请求发起人看看你是否对这个解释感到满意,或者正在寻找更具体的解释,这种情况我需要在节点的所述版本中重现这一点并进一步调试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.