16

別のスクリプトから実行したいスクリプトがあります。問題は、子スクリプト(プロセス)が続行する前にユーザー入力が必要なことです。

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;
    }
});

同じことが仮定で動作します:

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();
});
4

1 に答える 1

11

パッケージを使用できますsupposeUnixExpectのようなものです。完全開示、私は著者です。

Githubページの例から、NPMのスクリプトの例を見ることができます:https ://github.com/jprichardson/node-suppose

例:

var suppose = require('suppose')
suppose('script')
.on(/\w*/).respond('my data\n')
.end(function(code){
  console.log('Done: ' + code); 
})
于 2012-12-01T08:07:23.863 に答える