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
edchild\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