var spawn = require("child_process").spawn;
var child = spawn("scp" , ["-P9022", path_to_file, scp_remote_path])
child.stdout.on("data", function(){
//Automatically type in password
})
我正在尝试scp进入删除服务器并自动输入密码(我知道,我应该使用公钥auth代替,但这不是重点)。当我运行显示的代码时,我得到正确的密码提示;无论如何我可以通过代码检测出所述提示的存在吗?在这种情况下似乎没有触发“数据”事件。
编辑:不确定这是否重要,但process.stdout.isTTY为true。当然,我接着试着像process那样监听process.stdin的可读事件
process.stdin.on "readable", ()->
buf = process.stdin.read()
buf2 = process.stdout.read()
console.log "pin", buf, buf2
调用回调,但buf和buf2都为空
答案 0 :(得分:1)
节点0.10中的流已更改,这可能是事件未触发的原因。理论上,添加“data”事件侦听器应该将可读流切换为向后兼容模式。但是,在您开始收听“数据”时,事物可能已处于某种状态。 (这是我的理论,我可能完全错了)
使用节点0.10中的新可读流,您不应该监听“data”事件,而是侦听“可读”事件,然后从流中读取数据。有关详细信息,请参阅此处readable event
试试这个:
child.stdout.on("readable", function(){
var buf = child.stdout.read();
// check that you got your complete prompt for password...
// write password to stdin...
});