节点运行命令提示用户

3
我正在尝试从一个名为node的.js文件中运行一个命令(aws configure)。我一直在使用child_process,它允许我执行一个命令或批处理文件。然而,当该文件通常会提示用户输入用户名和密码时,我无法进行交互。
我尝试使用process.stdin与node一起使用,以便使用node作为用户输入的中间人,但我无法将两者联系起来。
如果有任何想法,那就太好了!
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);
});

这只是我目前正在追求的路径。如果有更好的建议,请告诉我!

谢谢。

1个回答

0
两个想法:首先,我认为参数应该在第二个参数中。其次,也许aws命令没有意识到它是一个交互式终端或者其他什么。你可以尝试使用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);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接