NodeJS:subprocess事件

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到一个删除服务器和自动密码input(我知道,我应该使用公共密钥authentication,而不是重点)。 当我运行显示的代码时,我得到正确的密码提示; 无论如何,我可以通过代码检测到提示的存在吗? 在这种情况下,“数据”事件似乎没有被触发。

编辑:不知道这是否重要,但process.stdout.isTTY是真的。 当然,我然后试着像process.stdin一样听可读的事件

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

callback被调用,但是buf和buf2都是空的

stream节点在节点0.10中发生了变化,这可能是事件不能触发的原因。 从理论上讲,添加一个“数据”事件监听器应该把可读stream切换到一个向后兼容的模式。 但是,在开始聆听“数据”的时候,事情可能已经处于某种状态。 (这是我的理论,我可能完全错了)

使用节点0.10中的新可读stream,您不应该监听“数据”事件,而应该监听“可读”事件,然后从stream中读取数据。 在这里看到更多的信息可读的事件

尝试这个:

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