Node.js dosyasındaki "process.stdout.write" ve "console.log" arasındaki fark nedir?
EDIT: bir değişken için console.log kullanmak process.stdout.write kullanırken okunamayan çok fazla karakter gösterdi bir nesne gösterdi.
Neden?
Node.js dosyasındaki "process.stdout.write" ve "console.log" arasındaki fark nedir?
EDIT: bir değişken için console.log kullanmak process.stdout.write kullanırken okunamayan çok fazla karakter gösterdi bir nesne gösterdi.
Neden?
Yanıtlar:
console.log()process.stdout.writebiçimlendirilmiş çıkışlı çağrılar . format()Uygulama için console.js dosyasına bakın .
Şu anda (v0.10.ish):
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
console.log()yeni bir satır eklemek gibi görünüyor
Görünüşe göre Node belgelerine baktığımızda console.log sadece process.stdout.write ve sonunda satır sonu var:
console.log = function (d) {
process.stdout.write(d + '\n');
};
Kaynak: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
Bunun çok eski bir soru olduğunu biliyorum ama kimsenin process.stdout.writeveconsole.log benim de bunu değinmek istiyorum.
As Mauvis Leford ve TK-421 işaret, console.logbir ekler line-break(satırın sonundaki karakteri \n) ama bu ne kadar değil.
Kod en azından 0.10.Xversiyondan bu yana değişmedi ve şimdi bir 5.Xversiyonumuz var.
İşte kod:
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
Gördüğünüz gibi, söyleyen .apply(this, arguments)ve işlevsellik üzerinde büyük bir fark yaratan bir bölüm var . Bunu örneklerle açıklamak daha kolaydır:
process.stdout.write çok temel bir işlevselliğe sahiptir, orada bir şey yazabilirsiniz, şöyle:
process.stdout.write("Hello World\n");
Kesme çizgisini sonuna koymazsanız, dizenizden sonra tuhaf bir karakter alırsınız, şöyle bir şey:
process.stdout.write("Hello World"); //Hello World%
(Bunun "programın sonu" gibi bir şey anlamına geldiğini düşünüyorum, bu yüzden yalnızca process.stdout.writedosyanızın sonunda kullanıldıysa ve mola satırını eklemediyseniz görürsünüz)
Öte yandan, console.logdaha fazlasını yapabilir.
Aynı şekilde kullanabilirsiniz
console.log("Hello World"); //You don't need the break line here because it was already formated ve ayrıca garip bir karakter kayboldu
Birden fazla dize yazabilirsiniz
console.log("Hello", "World");
İlişkilendirmeler yapabilirsiniz
console.log("Hello %s", "World") //Useful when "World" is inside a variable
İşte bu, ek işlevsellik util.format.applykısmı sayesinde verilir (bunun tam olarak ne yaptığı hakkında çok konuşabilirim ama benim fikrimi anlıyorsunuz, daha fazlasını buradan okuyabilirsiniz ).
Umarım birisi bu bilgiyi faydalı bulur.
stdout.writeve alınmasından kaçındığınızı da açıklamanız çok yararlı olacaktır%
%Sonuna ulaşma problemini basitçe döngümün sonunda arayarak process.stdout.write('\n');çözdüm (örneğin, varsa)
%Sadece dosyanın sonunda hiçbir satır yoktur demenin Shell'in yoludur.
%dosyasında
Belirtilmeyen büyük bir fark, process.stdout öğesinin yalnızca dizeleri bağımsız değişken olarak almasıdır (ayrıca akışlar da olabilir), console.log herhangi bir Javascript veri türünü alır.
Örneğin:
// 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)
Bu bağlamdaki bir diğer önemli fark process.stdout.clearLine()veprocess.stdout.cursorTo(0) .
Yalnızca bir satırdaki indirme veya işleme yüzdesini göstermek istiyorsanız bu yararlı olacaktır. ClearLine () kullanırsanız, cursorTo () console.log()işlevi metne \ n de eklendiğinden çalışmaz. Sadece bu örneği deneyin:
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);
Ben sadece postps yöntemi için https.request ile ilgili yardım aldıktan sonra araştırma yaparken bir şey fark ettim. Anlamaya yardımcı olacak bazı girdileri paylaştığımı düşündüm.
process.stdout.writeconsole.logdiğerlerinin de belirttiği gibi yeni bir satır eklemez . Ancak örneklerle açıklanması daha kolay olan bu da var.
var req = https.request(options, (res) => {
res.on('data', (d) => {
process.stdout.write(d);
console.log(d)
});
});
process.stdout.write(d);yeni bir satır olmadan verileri düzgün bir şekilde yazdırır. Ancak console.log(d)yeni bir satır yazdırılacak, ancak veriler düzgün gösterilmeyecek ve<Buffer 12 34 56... örneğin .
Yapmak için console.log(d)doğru bilgi göstermek, bunu yapmak gerekir.
var req = https.request(options, (res) => {
var dataQueue = "";
res.on("data", function (d) {
dataQueue += d;
});
res.on("end", function () {
console.log(dataQueue);
});
});
Temel olarak:
process.stdout.write sürekli olarak alınan veri olarak bilgileri yazdırır ve yeni bir satır eklemez.
console.log alınan noktadan elde edilen bilgileri basar ve yeni bir satır ekler.
Bunu açıklamanın en iyi yolu bu.
Basit Fark: console.log () yöntemleri otomatik olarak yeni satır karakteri ekler. Bu, sonucun üzerinden geçiyor ve yazdırıyor olsak, her sonuç yeni bir satıra yazdırılır.
process.stdout.write () yöntemleri yeni satır karakteri eklemez. baskı desenleri için kullanışlıdır.
Console.log Gerçekleştirmek process.sdout.write, process.sdout.write, doğrudan konsolunuzdan çıktı alacak bir arabellek / akıştır.
Benim puglin göre serverline : console = new Console(consoleOptions)kendinizinkiyle Konsol sınıfını yeniden yazabilirsiniz taleb sistemine.
Console.log'un kod kaynağını görebilirsiniz:
Daha fazla gör :