2015-11-02 9 views
8

मुझे बाल-प्रक्रिया मॉड्यूल में समस्या है, खासकर बच्चे के साथ। स्पॉन और child.fork।node.js बाल प्रक्रिया मॉड्यूल में संदेशों से बच्चे के माता-पिता से stdout कैसे पास करें?

This is a special case of the child_process.spawn() functionality for spawning Node.js processes. In addition to having all the methods in a normal ChildProcess instance, the returned object has a communication channel built-in. See child.send(message, [sendHandle]) for details.

मैं नीचे मेरी समस्या को सरल बनाया गया है:: मैं child_process.fork के प्रलेखन, जो कहते हैं पर भरोसा कर रहा हूँ

parent.js है:

var cp = require('child_process'); 
var n = cp.fork('./child.js'); 
n.send({a:1}); 
//n.stdout.on('data',function (data) {console.log(data);}); 
n.on('message', function(m) { 
    console.log("Received object in parent:"); 
    console.log(m); 
}); 

child.js है:

process.on('message', function(myObj) { 
    console.log('myObj received in child:'); 
    console.log(myObj); 
    myObj.a="Changed value"; 
    process.send(myObj); 
}); 
process.stdout.write("Msg from child"); 

जैसा कि अपेक्षित था। आउटपुट है:

Msg from child 
myObj received in child: 
{ a: 1 } 
Received object in parent: 
{ a: 'Changed value' } 

मैं इसे parent.js में टिप्पणी की गई पंक्ति के साथ काम करना चाहता हूं। दूसरे शब्दों में, मैं n.stdout.on ('डेटा' ... माता पिता की प्रक्रिया में बयान में बच्चे की प्रक्रिया में stdout को पकड़ने के लिए चाहते हैं, तो मैं यह uncomment, मैं कोई त्रुटि मिलती है:।

n.stdout.on('data',function (data) {console.log(data);}); 
    ^
TypeError: Cannot read property 'on' of null 

मुझे किसी भी बच्चे-प्रक्रिया एसिंक्रोनस विविधता, निष्पादन, कांटा या स्पॉन का उपयोग करने में कोई फर्क नहीं पड़ता। कोई सुझाव?

+0

क्या कोई कृपया समझा सकता है - स्ट्रीमिंग करते समय 'डेटा' के बजाय 'संदेश' श्रोता को क्यों पसंद किया जाए ... डेटा? – ymz

उत्तर

17

जब आप इसे फोर्क() में पास करते हैं तो आपको विकल्प ऑब्जेक्ट पर चुप संपत्ति सेट करने की आवश्यकता होती है stdin, stdout और stderr के लिए माता-पिता की प्रक्रिया करने के लिए वापस पाने के लिए पहुंचाया।

जैसे var n = cp.fork('./child.js', [], { silent: true });

+0

वैसे, क्या इन लॉग को पढ़ने और '{silent: true}' का उपयोग करते समय उन्हें संसाधित करने का कोई तरीका है? – Kunok

संबंधित मुद्दे

 संबंधित मुद्दे