2016-08-30 126 views
2

我試圖運行從節點調用.js文件中的命令(aws配置)。我一直在使用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

兩個想法:第一,我認爲參數應該是在第二個參數。其次,也許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); 
});