J'essaie d'exécuter des commandes sur Windows via des processus enfants NodeJS:
var terminal = require('child_process').spawn('cmd');
terminal.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
terminal.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
terminal.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
setTimeout(function() {
terminal.stdin.write('echo %PATH%');
}, 2000);
Quand il appelle ti.stdin.write
, il l'écrit dans le descripteur stdin
, mais comment puis-je déclencher cmd
pour qu'il réagisse à ce stade? Comment puis-je envoyer le signal de touche "Entrée" que vous faites lorsque vous tapez réellement dans l'invite de commande? Actuellement, je ne reçois aucune réponse de cmd
.
L'envoi d'une nouvelle ligne \n
Exécutera la commande. .end()
quittera le Shell.
J'ai modifié l'exemple pour travailler avec bash car je suis sur osx.
var terminal = require('child_process').spawn('bash');
terminal.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
terminal.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
setTimeout(function() {
console.log('Sending stdin to terminal');
terminal.stdin.write('echo "Hello $USER. Your machine runs since:"\n');
terminal.stdin.write('uptime\n');
console.log('Ending terminal session');
terminal.stdin.end();
}, 1000);
La sortie sera:
Sending stdin to terminal
Ending terminal session
stdout: Hello root. Your machine runs since:
stdout: 9:47 up 50 mins, 2 users, load averages: 1.75 1.58 1.42
child process exited with code 0
Il suffit d'envoyer la fin de ligne (\ n) avec la commande:
setTimeout(function() {
terminal.stdin.write('echo %PATH%\n');
}, 2000);
Vous pouvez utiliser la méthode exec child_process. Voici un exemple:
var exec = require('child_process').exec,
child;
child = exec('echo %PATH%',
function (error, stdout, stderr) {
if(stdout!==''){
console.log('---------stdout: ---------\n' + stdout);
}
if(stderr!==''){
console.log('---------stderr: ---------\n' + stderr);
}
if (error !== null) {
console.log('---------exec error: ---------\n[' + error+']');
}
});
Assurez-vous que stdin.end()
à un moment donné ou le processus enfant ne se terminera pas.