如何通过NodeJSsubprocess运行命令?

我想通过NodeJSsubprocess在Windows上运行命令:

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

当它调用ti.stdin.write ,它将其写入stdin描述符,但是如何触发cmd以在此处作出反应? 如何在input命令提示符时发送“input”键信号? 目前我没有从cmd得到任何回应。

发送一个换行符将执行该命令。 .end()将退出shell。

我修改了这个例子来处理bash,因为我在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); 

输出将是:

 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 

你只需要发送行结束(\ n)与命令:

 setTimeout(function() { terminal.stdin.write('echo %PATH%\n'); }, 2000); 

你可以使用child_process的exec方法。 这里是一个例子:

 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+']'); } }); 

确保你在某一点stdin.end()或subprocess不会退出。