节点运行命令提示用户

我试图从一个叫node的.js文件运行一个命令(aws configure)。 我一直在使用child_process ,它允许我执行一个命令或batch file。 但是,如果该文件通常会提示用户input用户名和密码,则无法进行交互。

我尝试使用process.stdin节点为了也许使用节点作为用户的input的中间人,但我无法将两者连接在一起。

如果有人有任何想法,将是伟大的!

var spawn = require('child_process').spawn; var mystdin = process.stdin; var conf = spawn('aws configure', {input: mystdin, shell: true}); //When command returns conf.stdout.on('data', function(data) { console.log('stdout: ' + data); //prompt for input mystdin.resume(); mystdin.setEncoding('utf8'); var util = require('util'); mystdin.on('data', function (text) { //INSERT ANSWER HERE console.log('received data:', util.inspect(text)); if (text === 'quit\n') { done(); } }); function done() { console.log('Now that process.stdin is paused, there is nothing more to do.'); process.exit(); } }); conf.stderr.on('data', function(data) { console.log('stdout: ' + data); }); conf.on('close', function(code) { console.log('child precess exited with code ' + code); }); 

这只是我目前正在走下坡路。 如果有人有更好的build议让我知道!

谢谢

两个想法:首先,我认为这些论据应该是在第二个参数。 其次,也许aws命令没有意识到它是一个交互式terminal或什么的。 你可以尝试像这样的child_process,或者如果这不起作用,用pty.js

 var pty = require('pty.js'); var term = pty.spawn('aws', ['configure'], { name: 'xterm-color', cols: 80, rows: 30, cwd: process.env.HOME, env: process.env }); term.on('data', function(data) { console.log(data); });