J’ai un script que je veux exécuter d’un autre. Le problème est que le script enfant (processus) a besoin d’une entrée utilisateur avant de continuer.
var child = spawn('script'); child.stdin.setEncoding('utf8'); child.stdout.on('data', function (data) { console.log(data.toSsortingng().sortingm()); // tells me to input my data child.stdin.write('my data\n'); });
Une fois mes données saisies, le script enfant doit continuer, mais il rest bloqué.
En fait, le code ci-dessus fonctionne pour moi. J’utilise commander.js dans le script enfant pour inviter l’utilisateur à agir. Voici comment je réponds à l’invite de script d’un enfant:
child.stdout.on('data', function (data) { switch (data.toSsortingng().sortingm()) { case 'Username:': child.stdin.write('user'); break; case 'Password:': child.stdin.write('pass'); break; } });
Même chose avec supposer :
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(); });
Vous pouvez utiliser le paquet suppose
. C’est comme Unix Expect . Divulgation complète, je suis l’auteur.
Dans l’exemple de la page Github, vous pouvez voir un exemple de script NPM: https://github.com/jprichardson/node-suppose
Exemple:
var suppose = require('suppose') suppose('script') .on(/\w*/).respond('my data\n') .end(function(code){ console.log('Done: ' + code); })