1
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 进入删除服务器并自动输入密码(我知道,我应该改用公钥身份验证,但这不是重点)。当我运行显示的代码时,我得到了正确的密码提示;无论如何我可以通过代码检测到所述提示的存在吗?在这种情况下,似乎没有触发“数据”事件。

编辑:不确定这是否重要,但 process.stdout.isTTY 是真的。当然,然后我尝试像这样监听 process.stdin 的可读事件

process.stdin.on "readable", ()->
        buf = process.stdin.read()
        buf2 = process.stdout.read()
        console.log "pin", buf, buf2

回调被调用,但 buf 和 buf2 均为空

4

1 回答 1

1

节点 0.10 中的流已更改,这可能是事件未触发的原因。理论上,添加“数据”事件监听器应该将可读流切换到向后兼容模式。但是,在您开始收听“数据”时,事情可能已经处于某种状态。(这是我的理论,我可能完全错了)

使用节点 0.10 中的新可读流,您不应该监听“数据”事件,而是监听“可读”事件,然后从流中读取数据。请参阅此处了解更多信息可读事件

尝试这个:

child.stdout.on("readable", function(){
     var buf = child.stdout.read();
     // check that you got your complete prompt for password... 
     // write password to stdin...
});
于 2013-03-27T00:18:03.040 回答