NodeJS:子进程上的事件

时间:2013-03-25 19:17:07

标签: javascript node.js process scp spawn

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都为空

1 个答案:

答案 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...
});