নোড.জেজে "প্রক্রিয়া.স্টডআউট.উইট" এবং "কনসোল.লগ" এর মধ্যে পার্থক্য?


323

নোড.জেজে "প্রক্রিয়া.স্টডআউট.উইট" এবং "কনসোল.লগ" এর মধ্যে পার্থক্য কী?

সম্পাদনা: ভেরিয়েবলের জন্য কনসোল.লগ ব্যবহার করে প্রসেস.স্টডআউট.উইরাইট ব্যবহার করার সময় প্রচুর অপঠনযোগ্য অক্ষর দেখানো হয়েছিল an

তা কেন?


4
আপনি একটি উদাহরণ প্রদান করতে পারেন? কনসোল.লগ () ফর্ম্যাট আউটপুট সহ প্রসেস.স্টডআউট.রাইট কল করে। বাস্তবায়নের জন্য কনসোল.জেজে ফর্ম্যাট () দেখুন।
TK-421

উত্তর:


324

console.log()process.stdout.writeবিন্যাসিত আউটপুট সহ কল । format()বাস্তবায়নের জন্য কনসোল.জেএস এ দেখুন ।

বর্তমানে (v0.10.ish):

Console.prototype.log = function() {
  this._stdout.write(util.format.apply(this, arguments) + '\n');
};

34
এছাড়াও উল্লেখযোগ্য যে এটি console.log()একটি নতুন লাইন যুক্ত করেছে
jchook

143

নোড দস্তাবেজগুলিতে আপাতদৃষ্টিতে কনসোল.লগ খুঁজছেন কেবল প্রসেস.স্টডআউট.শেষে লাইন-ব্রেক সহ রাইটিং:

console.log = function (d) {
  process.stdout.write(d + '\n');
};

সূত্র: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout


18
পরে আশেপাশের লোকেরা আসার জন্য, দয়া করে মনে রাখবেন যে v0.3.1 অনেক আগে ছিল এবং তখন থেকেই জিনিসগুলি পরিবর্তিত হয়েছে। :)
ব্রেন্ডন

5
... নাঃ। সবেমাত্র v0.9.9 ডক্সে দেখেছি এবং কনসোল.লগটি এখনও একটি লাইনব্রেক সহ প্রসেস.স্টডআউট.উইনাইট করার একটি উপনাম। মন্তব্য করার আগে আপনার গবেষণা করুন। nodejs.org/docs/v0.9.9/api/process.html#process.stdout
মাউভিস লেডফোর্ড

13
1) v0.9.9 দুই বছরের পুরানো 2) যে ডকুমেন্টেশনটি ভুল, v0.9.9 অনুযায়ী ফর্ম্যাটটি ব্যবহারের মাধ্যমে বিভক্ত
ব্রেন্ডন

4
প্রকৃতপক্ষে, দেখে মনে হচ্ছে যে ডকুমেন্টেশনগুলি কখনই আপডেট হয়নি এবং এখনও রয়েছে (কেউ ডিআরওয়াই?)। আমি এটি ঠিক করার জন্য একটি জন জমা দিচ্ছি, আমাকে এই সমস্যাটি সম্পর্কে অবহিত করার জন্য ধন্যবাদ :)
ব্রেন্ডন


66

আমি জানি এই একটি খুব পুরানো প্রশ্ন হল কিন্তু আমি কেহ মধ্যে মূল পার্থক্য সম্পর্কে কথা বলা দেখতে পাইনি 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আরও কিছু করতে পারেন।

  1. আপনি এটি একইভাবে ব্যবহার করতে পারেন

    console.log("Hello World"); //You don't need the break line here because it was already formated এবং সেই অদ্ভুত চরিত্রটিও অদৃশ্য হয়ে গেল

  2. আপনি একাধিক স্ট্রিং লিখতে পারেন

    console.log("Hello", "World");

  3. আপনি সমিতি করতে পারেন

    console.log("Hello %s", "World") //Useful when "World" is inside a variable

এটি হ'ল, যুক্ত হওয়া কার্যকারিতাটি util.format.applyঅংশটির জন্য ধন্যবাদ জানানো হয়েছে ( এটি ঠিক কী করে তা নিয়ে আমি অনেক কথা বলতে পারি তবে আপনি আমার বক্তব্যটি পান, আপনি এখানে আরও পড়তে পারেন )।

আমি আশা করি যে কেউ এই তথ্য দরকারী বলে মনে করি।


আপনি কীভাবে কীভাবে ব্যবহার করবেন stdout.writeএবং কীভাবে এড়াবেন সে সম্পর্কেও যদি আপনি ব্যাখ্যা করেন তবে এটি খুব সহায়ক হবে%
মুহাম্মদ আরেফ

আমি আমার লুপের শেষে %কেবল কল করে শেষ পর্যন্ত পাওয়ার সমস্যাটি সমাধান process.stdout.write('\n');করেছি (যদি আপনার উদাহরণস্বরূপ থাকে)
মুহাম্মদ আরেফ

2
%ফাইলটির শেষে কোনও নিউলাইন নেই বলার উপায়টি কেবল এটিই।
ডেভ নিউটন

1
আপনার পয়েন্ট @DaveNewton, গুরুত্বপূর্ণ কারণ এটি এর মানে হল যে আপনি একটি ফাইলে আপনার প্রোগ্রাম আউটপুট পুনঃনির্দেশিত হচ্ছেন, উদাহরণস্বরূপ, আপনি যে পাবেন না %ফাইলের মধ্যে
mr.mams

31

একটি বড় পার্থক্য যা উল্লেখ করা হয়নি তা হ'ল প্রক্রিয়া.স্টডআউট কেবল স্ট্রিংগুলিকে আর্গুমেন্ট হিসাবে গ্রহণ করে ( স্ট্রিপগুলিও পাইপ করা যায়), যখন কনসোল.লগ কোনও জাভাস্ক্রিপ্ট ডেটা টাইপ নেয়।

উদাহরণ:

// 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)

15

এই প্রসঙ্গে আরও একটি গুরুত্বপূর্ণ পার্থক্য হবে 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);

এই আমি খুঁজছি। ধন্যবাদ।
প্যাট্রিক পি।

5

পোস্ট পদ্ধতির 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 পুনরুদ্ধারের সময়ে কী প্রাপ্ত হয়েছিল তা তথ্য মুদ্রণ করে এবং একটি নতুন লাইন যুক্ত করে।

আমি এটি ব্যাখ্যা করতে পারার সেরা উপায়।


1

সাধারণ পার্থক্যটি হ'ল: কনসোল.লগ () পদ্ধতিগুলি স্বয়ংক্রিয়ভাবে নতুন রেখার অক্ষর যুক্ত করে। এর অর্থ যদি আমরা ফলাফলটি লুপ করে দেখছি এবং প্রিন্ট করছি, প্রতিটি ফলাফল নতুন লাইনে মুদ্রিত হবে।

process.stdout.write () পদ্ধতিতে নতুন লাইন চরিত্র যুক্ত হয় না। মুদ্রণ নিদর্শন জন্য দরকারী।


0

কনসোল.লগ বাস্তবায়ন প্রক্রিয়া.সডাউট.উইরাইট, প্রসেস.সডাউট.উইরাইট একটি বাফার / স্ট্রিম যা আপনার কনসোলটিতে সরাসরি আউটপুট আসবে।

আমার puglin মতে serverline : console = new Console(consoleOptions)আপনি আপনার নিজের সঙ্গে কনসোল বর্গ পুনর্লিখন করতে readline সিস্টেম।

আপনি কনসোল.লগের কোড উত্স দেখতে পারেন:


আরো দেখুন :

  • আপনার কাস্টম আচরণ বা কনসোল ইনপুট ব্যবহার করতে readline.createInterface
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.