別のスクリプトから実行したいスクリプトがあります。問題は、子スクリプト(プロセス)が続行する前にユーザー入力が必要であるということです。生成されたプロセスの標準ノードに書き込みますか?
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