2013-06-17 9 views
9

मैं इस तरह एक बच्चे प्रक्रिया अंडे:फोर्स Node.js फ्लश करने के लिए बच्चे के लिए लिखते हैं प्रक्रियाओं

proc.stdin.setEncoding('utf8'); 
proc.stdout.setEncoding('utf8'); 
proc.stderr.setEncoding('utf8'); 

proc.stdout.on('data', function (data) { 
    console.log('out: ' + data); 
}); 

proc.stderr.on('data', function (data) { 
    console.log('err: ' + data); 
}); 

proc.on('close', function (code) { 
    console.log('subprocess exited with status ' + code); 
    proc.stdin.end(); 
}); 

मेरे अजगर स्क्रिप्ट पढ़ता stdin से लाइनों और:

var child = require('child_process'); 
var proc = child.spawn('python', ['my_script.py', '-p', 'example']); 

मैं भी कुछ डेटा से निपटने के लिए सेट प्रत्येक पंक्ति के लिए stdout पर कुछ संचालन और प्रिंट करता है। यह ठीक काम करता है खोल में (मैं एक पंक्ति लिख सकते हैं और मैं उत्पादन तुरंत मिलता है) लेकिन जब मैं नोड में ऐसा करते हैं:

for (var i = 0; i < 10; i++) { 
    proc.stdin.write('THIS IS A TEST\n'); 
} 

मैं कुछ भी नहीं मिलता है।

मुझे इसे proc.stdin.end() पर कॉल करने के लिए ठीक करना है, लेकिन यह बाल प्रक्रिया को भी समाप्त करता है (जिसे मैं पृष्ठभूमि में रहना चाहता हूं, स्ट्रीमिंग डेटा)।

मैंने भी बहुत सारे लिखने के साथ बफर भरने के लिए एक फ्लश ट्रिगर किया, लेकिन यह वास्तव में एक विकल्प नहीं है।

क्या स्ट्रीम को मैन्युअल रूप से फ़्लश करने का कोई तरीका है?

+0

तो 'लिखने()' सच देता है, तो यह प्लावित किया गया है। यदि यह झूठा लौटाता है, तो आप लिखने वाले बफर को पूरी तरह से फ़्लश किए जाने पर सत्यापित करने के लिए 'नाली' घटना को सुन सकते हैं। आप कह रहे हैं कि आप डेटा लिख ​​सकते हैं, और यह कभी भी फिसल नहीं जाता है? मुझे संदेह होगा कि बाल प्रक्रिया डेटा को तोड़ रही है और इनपुट को तोड़ने के लिए '\ n' के अलावा कुछ और ढूंढ रही है। जब आप अपने इनपुट बफर को ओवरफ़्लो करते हैं, या स्ट्रीम समाप्त करते हैं, तो उस समय बच्चे को डेटा को संसाधित करने के लिए मजबूर होना पड़ता है। –

+0

@ ब्रेटकोपलैंड यूप, 'लिखें() 'रिटर्न' सत्य '। मैंने सोचा कि शायद यह लिखा नहीं जा रहा था ... लेकिन शायद पढ़ा? यह अजीब है, लेकिन मुझे यकीन है कि बच्चे शैल में काम करने के बाद से डेटा को खंडित नहीं कर रहे हैं, और मैं इसे सत्यापित कर सकता हूं कि यह '\ n' की तलाश में है। स्क्रिप्ट को चलाने और बस लाइनों को लिखना और एंटर कार्यों को दबाए जाने के रूप में दबाएं (डेटा को स्टडआउट पर लिखा जाता है क्योंकि एंटर दबाया जाता है और प्रक्रिया बाहर नहीं निकलती है)। मैं वास्तव में यहाँ अटक गया हूँ। – kaoD

+1

दोस्त यहाँ वही समस्या है। spawned grep कभी outputs। – kilianc

उत्तर

2

आप प्रिंट स्टेटमेंट के बाद पायथन से आउटपुट फ्लश नहीं कर रहे हैं। मुझे भी इसी तरह की समस्या थी और @ एल्फ ने मेरे प्रश्न का उत्तर दिया। इस पर एक नज़र डालें:

Stream child process output in flowing mode

+0

दुर्भाग्य से मैंने कोड को त्याग दिया ताकि मैं यह जांच न सकूं कि यह समस्या हल करता है या नहीं। जवाब के लिए धन्यवाद! – kaoD

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