2014-07-08 9 views
9

Sto provando a catturare lo stdout da ed child_process in node.js (0,10,29).node.js child_process.spawn senza stdout a meno che 'inherit'

In questo momento mi sto solo cercando con ping

Il seguente codice non stampa (ma non fa rumore metallico)

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); 
}) 

Se cambio stdio: 'pipe'-stdio: 'inherit' e sbarazzarsi dei stdout/stderr ganci come così:

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); 
// }) 

ottengo

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

Se cambio l'indirizzo 127.0.0.2-127.0.0.1, che so che rispondere ai ping e utilizzare il codice originale ottengo

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 

Tutte le idee perché output/error non sparano data eventi quando le il ping non è pinging o inheriting?

+0

cosa intendi con 'non stampa (ma fa ping)'? – Mritunjay

+0

Il processo 'ping' esegue e ping localhost ma il programma nodo non stampa su stdout. – dbenny

+0

ma ho copiato il tuo codice e funziona bene, credo. – Mritunjay

risposta

0

Ci sono state molte correzioni di problemi e miglioramenti delle funzionalità rispetto alla stampa da console, sulle linee di chunking e buffering. Poiché il problema non è più riproducibile, suppongo che ciò potrebbe essere dovuto a uno dei comportamenti non documentati del nodo allora, in base al numero di byte di dati disponibili per la stampa.

Dato che questa domanda è ancora aperta, vorrei chiedere al mittente di vedere se sei soddisfatto di questa spiegazione, o se cerchi altri più concreti, nel qual caso dovrei riprodurlo nella suddetta versione di nodo ed eseguire il debug .

Problemi correlati