नोड.जेएस में "process.stdout.write" और "कंसोल.लॉग" के बीच अंतर क्या है?
EDIT: एक वेरिएबल के लिए कंसोल.लॉग का उपयोग करते हुए, प्रक्रिया का उपयोग करते समय बहुत सारे अपठनीय अक्षर दिखाए गए ।stdout.write ने एक ऑब्जेक्ट दिखाया।
ऐसा क्यों है?
नोड.जेएस में "process.stdout.write" और "कंसोल.लॉग" के बीच अंतर क्या है?
EDIT: एक वेरिएबल के लिए कंसोल.लॉग का उपयोग करते हुए, प्रक्रिया का उपयोग करते समय बहुत सारे अपठनीय अक्षर दिखाए गए ।stdout.write ने एक ऑब्जेक्ट दिखाया।
ऐसा क्यों है?
जवाबों:
console.log()
process.stdout.write
स्वरूपित आउटपुट के साथ कॉल । format()
कार्यान्वयन के लिए कंसोल। Js में देखें ।
वर्तमान में (v0.10.ish):
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
console.log()
एक नई
स्पष्ट रूप से सांकेतिक शब्दों में बदलना नोड डॉक्स को देखते हुए। अंत में एक लाइन-ब्रेक के साथ सिर्फ process.stdout.write है:
console.log = function (d) {
process.stdout.write(d + '\n');
};
स्रोत: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
मैं जानता हूँ कि यह एक बहुत पुरानी सवाल है, लेकिन मैं किसी को भी बीच मुख्य अंतर के बारे में बात नहीं देखा था process.stdout.write
और console.log
और मैं सिर्फ यह उल्लेख करना चाहते हैं।
जैसा कि मौविस लेफोर्ड और टीके -421 ने बताया, लाइन के अंत में console.log
एक line-break
चरित्र जोड़ता है ( \n
) लेकिन यह सब क्या नहीं करता है।
कम से कम 0.10.X
संस्करण के बाद से कोड नहीं बदला है और अब हमारे पास एक 5.X
संस्करण है।
यहाँ कोड है:
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
जैसा कि आप देख सकते हैं, एक ऐसा भाग है जो कहता है .apply(this, arguments)
और जो कार्यक्षमता पर एक बड़ा अंतर डालता है। उदाहरण के साथ यह समझाना आसान है:
process.stdout.write
एक बहुत ही बुनियादी कार्यक्षमता है, आप कुछ इस तरह से लिख सकते हैं:
process.stdout.write("Hello World\n");
यदि आप अंत में ब्रेक लाइन नहीं डालते हैं तो आपको अपनी स्ट्रिंग के बाद एक अजीब चरित्र मिलेगा, कुछ इस तरह से:
process.stdout.write("Hello World"); //Hello World%
(मुझे लगता है कि "प्रोग्राम का अंत" जैसा कुछ मतलब है, इसलिए आप इसे केवल तभी देखेंगे जब आपको process.stdout.write
आपकी फ़ाइल के अंत में उपयोग किया गया था और आपने ब्रेक लाइन नहीं जोड़ी थी)
दूसरी ओर, console.log
अधिक कर सकते हैं।
आप इसे उसी तरह से इस्तेमाल कर सकते हैं
console.log("Hello World"); //You don't need the break line here because it was already formated
और यह भी कि अजीब चरित्र गायब हो गया
आप एक से अधिक स्ट्रिंग लिख सकते हैं
console.log("Hello", "World");
आप संघ बना सकते हैं
console.log("Hello %s", "World") //Useful when "World" is inside a variable
यह वह बात है, उस अतिरिक्त कार्यक्षमता को util.format.apply
भाग के लिए धन्यवाद दिया जाता है (मैं इस बारे में बहुत बात कर सकता हूं कि यह वास्तव में क्या करता है लेकिन आपको मेरी बात समझ में आती है, आप यहां और अधिक पढ़ सकते हैं )।
मुझे आशा है कि किसी को यह जानकारी उपयोगी लगेगी।
stdout.write
और प्राप्त करने से बचें%
%
कॉल करके अंत में प्राप्त करने की समस्या को हल किया process.stdout.write('\n');
(यदि आपके पास उदाहरण के लिए है)
%
सिर्फ वहाँ फ़ाइल के अंत में कोई नई पंक्ति है कह के खोल का तरीका है।
%
फ़ाइल में वह नहीं मिलेगा
एक बड़ा अंतर जिसका उल्लेख नहीं किया गया है, वह यह है कि process.stdout केवल स्ट्रिंग्स को तर्क के रूप में लेता है (इसे भी स्ट्रीम किया जा सकता है), जबकि कंसोल.लॉग किसी भी जावास्क्रिप्ट डेटा प्रकार को लेता है।
उदाहरण के लिए:
// ok
console.log(null)
console.log(undefined)
console.log('hi')
console.log(1)
console.log([1])
console.log({one:1})
console.log(true)
console.log(Symbol('mysymbol'))
// any other data type passed as param will throw a TypeError
process.stdout.write('1')
// can also pipe a readable stream (assuming `file.txt` exists)
const fs = require('fs')
fs.createReadStream('file.txt').pipe(process.stdout)
इस संदर्भ में एक और महत्वपूर्ण अंतर होगा process.stdout.clearLine()
और process.stdout.cursorTo(0)
।
यह उपयोगी होगा यदि आप केवल एक पंक्ति में डाउनलोड या प्रसंस्करण का प्रतिशत दिखाना चाहते हैं। यदि आप इसके साथ क्लियरलाइन (), कर्सरटो () का उपयोग करते हैं तो console.log()
यह काम नहीं करता है क्योंकि यह टेक्स्ट में \ n भी जुड़ता है । बस इस उदाहरण की कोशिश करो:
var waitInterval = 500;
var totalTime = 5000;
var currentInterval = 0;
function showPercentage(percentage){
process.stdout.clearLine();
process.stdout.cursorTo(0);
console.log(`Processing ${percentage}%...` ); //replace this line with process.stdout.write(`Processing ${percentage}%...`);
}
var interval = setInterval(function(){
currentInterval += waitInterval;
showPercentage((currentInterval/totalTime) * 100);
}, waitInterval);
setTimeout(function(){
clearInterval(interval);
}, totalTime);
पोस्ट विधि के लिए https.request की मदद लेने के बाद इस पर शोध करते हुए मैंने अभी कुछ देखा है। सोचा कि मैं कुछ इनपुट को समझने में मदद करने के लिए साझा करता हूं।
process.stdout.write
जब तक console.log
दूसरों ने उल्लेख किया था, तब एक नई पंक्ति नहीं जोड़ता है । लेकिन यह भी है कि उदाहरणों के साथ समझाना आसान है।
var req = https.request(options, (res) => {
res.on('data', (d) => {
process.stdout.write(d);
console.log(d)
});
});
process.stdout.write(d);
नई लाइन के बिना डेटा को ठीक से प्रिंट करेगा। हालाँकि console.log(d)
, एक नई लाइन प्रिंट करेगा लेकिन डेटा सही रूप से नहीं दिखाई देगा, <Buffer 12 34 56...
उदाहरण के लिए।
बनाने के लिए console.log(d)
जानकारी सही ढंग से दिखाने के लिए, मैं यह करने के लिए होगा।
var req = https.request(options, (res) => {
var dataQueue = "";
res.on("data", function (d) {
dataQueue += d;
});
res.on("end", function () {
console.log(dataQueue);
});
});
तो मूल रूप से:
process.stdout.write
डेटा को पुनर्प्राप्त किए जाने के रूप में लगातार जानकारी प्रिंट करता है और एक नई लाइन नहीं जोड़ता है।
console.log
पुनर्प्राप्ति के बिंदु पर प्राप्त की गई जानकारी को प्रिंट करता है और एक नई लाइन जोड़ता है।
यही सबसे अच्छा तरीका है कि मैं इसे समझा सकूं।
सिंपल डिफरेंस है: कंसोल.लॉग () मेथड्स अपने आप नई लाइन कैरेक्टर को बढ़ाते हैं। इसका अर्थ है कि यदि हम परिणाम को पा रहे हैं और परिणाम को मुद्रित कर रहे हैं, तो प्रत्येक परिणाम नई पंक्ति में मुद्रित हो जाता है।
process.stdout.write () विधियाँ नई पंक्ति वर्ण को जोड़ती नहीं हैं। मुद्रण पैटर्न के लिए उपयोगी है।
Console.log कार्यान्वित करने की प्रक्रिया। sdout.write, process.sdout.write एक बफर / स्ट्रीम है जो सीधे आपके कंसोल में आउटपुट करेगा।
मेरी puglin के अनुसार serverline : console = new Console(consoleOptions)
आप अपने खुद के साथ कंसोल वर्ग पुनर्लेखन कर सकते हैं ReadLine प्रणाली।
आप सांत्वना के कोड स्रोत देख सकते हैं।
और देखें :