我试图从使用node调用的.js文件中运行命令(aws configure)。我一直在使用child_process,它允许我执行命令或批处理文件。但是,当该文件通常会提示用户输入用户名和密码时,我无法进行该交互。
我尝试将process.stdin与节点一起使用,以便可能将节点用作用户输入的中间人,但我无法将这两者连接在一起。
如果有人有任何想法会很棒!
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);
});
这只是我目前要走的路。如果有人有更好的建议,请告诉我!
由于
答案 0 :(得分: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);
});