Başka birinden çalıştırmak istediğim bir komut dosyası var. Sorun, çocuk betiğinin (işlem) devam etmeden önce bir kullanıcı girdisine ihtiyacı olmasıdır.Püskürtme işlemine stdin nodejs yazılıyor mu?
var child = spawn('script');
child.stdin.setEncoding('utf8');
child.stdout.on('data', function (data) {
console.log(data.toString().trim()); // tells me to input my data
child.stdin.write('my data\n');
});
Verilerimi girdikten sonra, altyazı devam etmeli, ancak bunun yerine orada kalmalıdır.
Çözüm
Aslında yukarıdaki kod benim için çalışır. Kullanıcının harekete geçmesini istemek için çocuk komut dosyasına commander.js kullanıyorum. Burada bir çocuğun senaryo istemine yanıt nasıl: suppose ile
child.stdout.on('data', function (data) {
switch (data.toString().trim()) {
case 'Username:':
child.stdin.write('user');
break;
case 'Password:':
child.stdin.write('pass');
break;
}
});
Aynı şey iş:
var suppose = require('suppose');
suppose('script')
.on('Username: ').respond('user')
.on('Password: ').respond('pass')
.error(function (err) {
console.log(err.message);
})
.end(function (code) {
console.log(code);
done();
});
Sadece bir düşünce: Eğer sırayla 'stdin' sona gerekiyor senaryon cevap verecek mi? Ayrıca bkz .: http://nodejs.org/api/stream.html#stream_stream_end – skeggse
Dokümanlardan: Bu akışın son() yoluyla kapatılması genellikle çocuk sürecinin sonlandırılmasına neden olur. - http://nodejs.org/api/child_process.html#child_process_child_stdin Ve bunu doğrulayabildiğim çocuk sürecini sonlandırıyor. – simo