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 は true です。もちろん、私は process.stdin の読み取り可能なイベントをリッスンしようとしました

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

コールバックが呼び出されますが、buf と buf2 の両方が null です

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 に答える