নোড.জেজে "প্রক্রিয়া.স্টডআউট.উইট" এবং "কনসোল.লগ" এর মধ্যে পার্থক্য কী?
সম্পাদনা: ভেরিয়েবলের জন্য কনসোল.লগ ব্যবহার করে প্রসেস.স্টডআউট.উইরাইট ব্যবহার করার সময় প্রচুর অপঠনযোগ্য অক্ষর দেখানো হয়েছিল an
তা কেন?
নোড.জেজে "প্রক্রিয়া.স্টডআউট.উইট" এবং "কনসোল.লগ" এর মধ্যে পার্থক্য কী?
সম্পাদনা: ভেরিয়েবলের জন্য কনসোল.লগ ব্যবহার করে প্রসেস.স্টডআউট.উইরাইট ব্যবহার করার সময় প্রচুর অপঠনযোগ্য অক্ষর দেখানো হয়েছিল an
তা কেন?
উত্তর:
console.log()process.stdout.writeবিন্যাসিত আউটপুট সহ কল । format()বাস্তবায়নের জন্য কনসোল.জেএস এ দেখুন ।
বর্তমানে (v0.10.ish):
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
console.log()একটি নতুন লাইন যুক্ত করেছে
নোড দস্তাবেজগুলিতে আপাতদৃষ্টিতে কনসোল.লগ খুঁজছেন কেবল প্রসেস.স্টডআউট.শেষে লাইন-ব্রেক সহ রাইটিং:
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এবং আমি এটা উল্লেখ করতে চাই।
যেমন মাওভিস লেফোর্ড এবং টি কে -২২১ উল্লেখ করেছেন, রেখাগুলির শেষে 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');করেছি (যদি আপনার উদাহরণস্বরূপ থাকে)
%ফাইলটির শেষে কোনও নিউলাইন নেই বলার উপায়টি কেবল এটিই।
%ফাইলের মধ্যে
একটি বড় পার্থক্য যা উল্লেখ করা হয়নি তা হ'ল প্রক্রিয়া.স্টডআউট কেবল স্ট্রিংগুলিকে আর্গুমেন্ট হিসাবে গ্রহণ করে ( স্ট্রিপগুলিও পাইপ করা যায়), যখন কনসোল.লগ কোনও জাভাস্ক্রিপ্ট ডেটা টাইপ নেয়।
উদাহরণ:
// 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()কাজ করে না কারণ এটি পাঠ্যে app 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.writeconsole.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 () পদ্ধতিতে নতুন লাইন চরিত্র যুক্ত হয় না। মুদ্রণ নিদর্শন জন্য দরকারী।
কনসোল.লগ বাস্তবায়ন প্রক্রিয়া.সডাউট.উইরাইট, প্রসেস.সডাউট.উইরাইট একটি বাফার / স্ট্রিম যা আপনার কনসোলটিতে সরাসরি আউটপুট আসবে।
আমার puglin মতে serverline : console = new Console(consoleOptions)আপনি আপনার নিজের সঙ্গে কনসোল বর্গ পুনর্লিখন করতে readline সিস্টেম।
আপনি কনসোল.লগের কোড উত্স দেখতে পারেন:
আরো দেখুন :