shell - sistema - funcion exec en c
¿Cómo ejecutar comandos a través del proceso hijo NodeJS? (4)
Asegúrese de que stdin.end()
en algún momento o el proceso hijo no se cerrará.
Estoy intentando ejecutar comandos en Windows a través de procesos secundarios de 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);
Cuando llama a ti.stdin.write
, lo escribe en el descriptor stdin
, pero ¿cómo puedo hacer que cmd
reaccione en este punto? ¿Cómo envío la señal de la tecla "enter" que haces cuando estás escribiendo en el símbolo del sistema? Actualmente no recibo respuesta de cmd
.
El envío de una nueva línea /n
ejecutará el comando. .end()
saldrá del shell.
Modifiqué el ejemplo para trabajar con bash ya que estoy en 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 salida será:
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
Puede utilizar el método exec child_process. Aquí hay un ejemplo:
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+'']'');
}
});
Solo tienes que enviar el final de la línea (/ n) con el comando:
setTimeout(function() {
terminal.stdin.write(''echo %PATH%/n'');
}, 2000);