2013-11-28 7 views
12

मैं नोड में एक प्रक्रिया को उत्पन्न करने रहा हूँ और इस तरह आदेश के उत्पादन पर नज़र रखने:NodeJS अंडे stdout स्ट्रिंग प्रारूप

proc.stdout.on("data", function (data) { 
    console.log(data.toString()); 
}); 

यह अच्छी तरह से काम करता है, हालांकि, उत्पादन लगता लाइनों बंटवारे की जानी चाहिए:

npm http 
304 https://registry.npmjs.org/underscore 

उपरोक्त npm install से प्रतिक्रिया से केवल एक पंक्ति है। आम तौर पर यह सब एक पंक्ति में है, यह प्रतिक्रिया से पहले और बाद में लाइन ब्रेक भी जोड़ रहा है। मानक आउटपुट की तरह दिखने के लिए डेटा आउटपुट प्राप्त करने का कोई तरीका है, यानी लाइन-बाय-लाइन?

उत्तर

15

धाराएं data घटनाओं को बफर और उत्सर्जित करती हैं जब भी वे कृपया (बोलने के लिए) पाठ की रेखाओं की तरह सख्त सीमाओं पर नहीं।

लेकिन आप के लिए लाइनों में बफ़र्स पार्स करने के लिए readline मॉड्यूल का उपयोग कर सकते हैं:

var child_process = require('child_process'); 
var readline  = require('readline'); 
var proc   = child_process.spawn(...); 

readline.createInterface({ 
    input  : proc.stdout, 
    terminal : false 
}).on('line', function(line) { 
    console.log(line); 
}); 
5

3 समाधान जो मन में आ रहे हैं:

// solution #1 
process.stdout.write(data); 

// solution #2 
console.log(data.toString().replace(/[\n\r]/g, "")); 

// solution #3 
var child_process = require('child_process'); 
var readline = require('readline'); 
var proc = child_process.spawn(...); 
readline.createInterface({ 
    input: proc.stdout, 
    terminal: false 
}).on('line', function(line) { 
    console.log(line); 
}); 
संबंधित मुद्दे