क्या अजगर के लिए पाइथन या अन्य भाषाओं की तरह कोई स्टडआउट फ्लश है?नोडजेएस के लिए स्टडआउट फ्लश?
sys.stdout.write('some data')
sys.stdout.flush()
अभी मैंने नोडजेस के लिए केवल process.stdout.write()
देखा है।
क्या अजगर के लिए पाइथन या अन्य भाषाओं की तरह कोई स्टडआउट फ्लश है?नोडजेएस के लिए स्टडआउट फ्लश?
sys.stdout.write('some data')
sys.stdout.flush()
अभी मैंने नोडजेस के लिए केवल process.stdout.write()
देखा है।
process.stdout
WritableStream
ऑब्जेक्ट है, और विधि WritableStream.write()
स्वचालित रूप से स्ट्रीम को फ़्लश करती है (जब तक यह स्पष्ट रूप से कॉर्क नहीं किया जाता)। हालांकि, फ्लश सफल होने पर यह सच हो जाएगा, और कर्नेल बफर भरने पर गलत होगा और यह अभी तक नहीं लिख सकता है। यदि आपको उत्तराधिकार में कई बार लिखना है, तो आपको drain
ईवेंट को संभालना चाहिए।
the documentation for write
देखें।
write डेटा 0 flदेता है यदि डेटा फ़्लश किया गया है। यदि यह false
देता है, तो आप 'नाली' ईवेंट की प्रतीक्षा कर सकते हैं।
मुझे लगता है कि flush
नहीं है, क्योंकि यह एक अवरुद्ध ऑपरेशन होगा।
नए NodeJS संस्करणों में, आप, .write()
को एक कॉलबैक पारित कर सकते हैं जो एक बार डेटा प्लावित है बुलाया जाएगा:
sys.stdout.write('some data',() => {
console.log('The data has been flushed');
});
यह ठीक .write()
परिणाम जाँच और drain
घटना के लिए पंजीकरण के रूप में ही है:
var write = sys.stdout.write('some data');
if (!write) {
sys.stdout.once('drain',() => {
console.log('The data has been flushed');
});
}
एक और समारोह stdout
जो टर्मिनल के लिए पिछले उत्पादन स्पष्ट करने के लिए जो flush
function flush() {
process.stdout.clearLine();
process.stdout.cursorTo(0);
}
var total = 5000;
var current = 0;
var percent = 0;
var waitingTime = 500;
setInterval(function() {
current += waitingTime;
percent = Math.floor((current/total) * 100);
flush();
process.stdout.write(`downloading ... ${percent}%`);
if (current >= total) {
console.log("\nDone.");
clearInterval(this);
}
}, waitingTime);
cursorTo
0
जो प्रारंभिक बिंदु
stdout.write
से पहले flush
फ़ंक्शन का उपयोग करें, क्योंकि यह स्क्रीन साफ हो जाएगा, यदि आप के बाद आप किसी भी उत्पादन
स्ट्रीम नहीं देखेंगे डाल है स्थिति कर्सर ले जाने के होगा .write() पहले से ही एक अवरुद्ध ऑपरेशन है। – jrajav
@ क्यूरा लगभग सही। Stream.write अवरुद्ध नहीं है लेकिन stdout के लिए यह आमतौर पर है: http://nodejs.org/api/process.html#process_process_stdout धन्यवाद, उसे नहीं पता था। – Ishtar
मैं देखता हूं। मैं ईमानदार होने के लिए वास्तव में किसी भी तरह से नहीं जानता था, लेकिन मुझे लगता है कि इसे कम से कम उस बिंदु पर अवरुद्ध करना होगा जिसे उसने कर्नेल बफर को लिखा था। मुझे लगता है कि नोड के अनुसार गिनने के लिए "पर्याप्त अवरुद्ध" नहीं है। :) – jrajav