我有一個腳本,我想從另一個運行。問題在於,子腳本(進程)在繼續之前需要用戶輸入。寫入產生的進程stdin nodejs?
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');
});
輸入我的數據後,子腳本應該繼續,但是它會掛在那裏。
解決方案
其實上面的代碼適合我。我在子腳本中使用commander.js來提示用戶採取行動。這裏是我的孩子的腳本提示做出響應:
child.stdout.on('data', function (data) {
switch (data.toString().trim()) {
case 'Username:':
child.stdin.write('user');
break;
case 'Password:':
child.stdin.write('pass');
break;
}
});
同樣的事情,工作,suppose:
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();
});
只是一個想法:你需要結束'stdin'爲了你的腳本回應?另請參見:http://nodejs.org/api/stream.html#stream_stream_end – skeggse
從文檔:通過end()關閉此流通常會導致子進程終止。 - http://nodejs.org/api/child_process.html#child_process_child_stdin 它終止子進程,我可以確認它。 – simo