NodeJS:子进程的事件

NodeJS: Events on child processes

本文关键字:事件 子进程 NodeJS      更新时间:2023-09-26
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到一个删除服务器和自动密码输入(我知道,我应该使用公钥认证代替,但这是除了点)。当我运行所示的代码时,我得到了正确的密码提示;我是否可以通过代码检测到所述提示符的存在?在这种情况下,"data"事件似乎没有被触发。

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

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

回调被调用,但是buf和buf2都是null

流在节点0.10中发生了变化,这可能是事件未触发的原因。理论上,添加"data"事件侦听器应该将可读流切换为向后兼容模式。然而,当您开始收听"数据"时,事情可能已经处于某种状态。(这是我的理论,我可能完全错了)

对于节点0.10中的新可读流,您不应该侦听"data"事件,而是侦听"readable"事件,然后从流中读取数据。查看此处查看更多可读事件

试试这个:

child.stdout.on("readable", function(){
     var buf = child.stdout.read();
     // check that you got your complete prompt for password... 
     // write password to stdin...
});