I am trying to run commands on Windows via NodeJS child processes:
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);
When it calls ti.stdin.write
, it writes it to the stdin
descriptor, but how do I trigger cmd
to react at this point? How do I send the "enter" key signal that you do when you are actually typing in command prompt? Currently I get no response from cmd
.
Sending a newline \n
will exectue the command. .end()
will exit the shell.
I modified the example to work with bash as I'm on 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);
The output will be:
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