2015-04-24 5 views
7

Uzun lafın kısası: Bir gelişim arka planı için bir CLI oluşturmak istiyorum. Daemon, stdout'a farklı türde bilgiler çıkarır ve bu bilgiyi ekrana kaydırılabilir bir şekilde kullanıcı ekranına aktarmak istiyorum. Stdout'u kutsayarak mücadele ediyorum. Aşağıdaki basit prototip, hangi tamponlar stdout, bu yüzden bilgi asla tamamlanmaz.Stdout'u nasıl kutsanır?

var blessed = require('blessed'); 

var screen = blessed.screen(), 
body = blessed.box({ 
    top: 1, 
    left: 0, 
    width: '100%', 
    height: '99%' 
}), 
statusbar = blessed.box({ 
    top: 0, 
    left: 0, 
    width: '100%', 
    height: 1, 
    style: { 
    fg: 'white', 
    bg: 'blue' 
    } 
}); 

screen.append(statusbar); 
screen.append(body); 

screen.key(['escape', 'q', 'C-c'], function(ch, key) { 
    return process.exit(0); 
}); 

function status(text) { statusbar.setContent(text); screen.render(); } 
function log(text) { body.insertLine(0, text); screen.render(); } 

status('TEST'); 

var spawn = require('child_process').spawn; 

yes = spawn('yes', ['it is']); 

ls.stdout.on('data', function (data) { 
    log(data.toString()); 
}); 

ls.stderr.on('data', function (data) { 
    log(data.toString()); 
}); 
+0

Örnek kodunuzda 'ls' nedir? Belki bir şey özlüyorum, ama "stdout" formunu oluşturmak için yapmanız gereken tek şey, "evet" işlemi 'yes.stdout' den 'veri' olayını dinlemektir ... – mkhanoyan

+0

Birden fazla komutun birbiri ardına çalıştırılması gerekiyor , yani "evet" =/bin/yes ve "ls" =/bin/ls Sadece düğüm analogunu kullanıyorum, kabuk komutunu kullanmıyorum. – user1190411

cevap

0

hat

var screen = blessed.screen() 

giriş nereden geldiğini değiştirmek için değer alır ve burada çıkış çok gider.

var screen = blessed.screen({ input: some_input_stream, output: some_output_stream }) 

Yani, sadece çıkış parametresine yazılabilir (veya dubleks) akışı fırlatıp: Mantıken, onlar giriş ve çıkış adında ediyoruz. Daha sonra, istediğiniz her yerde çıkışı borulayabilirsiniz.