2014-07-08 8 views
9

Ich versuche, die Stdout von einem spawn ed child_process in node.js (0.10.29) zu erfassen.node.js child_process.spawn kein stdout außer 'erben'

Im Moment versuche ich nur mit ping

Der folgende Code druckt nicht (aber tut 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); 
}) 

Wenn ich stdio: 'pipe'-stdio: 'inherit' und loszuwerden, die stdout/stderr Haken ändern wie so:

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

ich

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

Wenn ich ändern die Adresse 127.0.0.2-127.0.0.1, die ich kenne, wird auf die Pings reagieren und den ursprünglichen Code verwende ich bekommen

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 

Irgendwelche Ideen, warum stdout/stderr nicht data Ereignisse feuern, wenn die Ping ist nicht pinging oder inheriting?

+0

was meinst du mit 'druckt nicht (aber ping)'? – Mritunjay

+0

Der 'Ping'-Prozess läuft und pingt localhost, aber das Knotenprogramm druckt nicht nach stdout. – dbenny

+0

aber ich habe Ihren Code kopiert und es funktioniert gut, denke ich. – Mritunjay

Antwort

0

Es gab viele Problembehebungen sowie Verbesserungen der Funktionen in Bezug auf den Konsolendruck, in den Bereichen Chunking und Pufferung. Da das Problem nicht reproduzierbarer ist, würde ich annehmen, dass dies auf eines der nicht dokumentierten Verhaltensweisen des damaligen Knotens zurückzuführen sein könnte, basierend darauf, wie viele Datenbytes zum Drucken verfügbar sind.

Da diese Frage noch offen ist, würde ich den Urheber bitten zu sehen, ob Sie mit dieser Erklärung zufrieden sind, oder nach konkreteren suchen, welchen Fall ich in der besagten Version von Node und Debug weiter reproduzieren müsste .