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.write
biç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.write
veconsole.log
benim de bunu değinmek istiyorum.
As Mauvis Leford ve TK-421 işaret, console.log
bir ekler line-break
(satırın sonundaki karakteri \n
) ama bu ne kadar değil.
Kod en azından 0.10.X
versiyondan bu yana değişmedi ve şimdi bir 5.X
versiyonumuz 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.write
dosyanızın sonunda kullanıldıysa ve mola satırını eklemediyseniz görürsünüz)
Öte yandan, console.log
daha 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.apply
kı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.write
ve 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.write
console.log
diğ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 :