2016-04-03 7 views
0

私は外部コマンドを実行し、ユーザー入力を待つ2つのフィールドをコンソールに出力します。 パスワード用のユーザー名とその他のパスワードを1つずつ入力してから手動で追加します。外部コマンドのstdinへの書き込み -

誰でもプログラムの中からこれらの入力を入力するためにstdinに書き込む方法についてのヒントを教えてください。

私のためのトリック部分は、入力を待っている2つのフィールドがあり、次々に入力する方法を理解するのに困っています。

login := exec.Command(cmd, "login") 

login.Stdout = os.Stdout 
login.Stdin = os.Stdin 
login.Stderr = os.Stderr 

err := login.Run() 
if err != nil { 
    fmt.Fprintln(os.Stderr, err) 
} 

SOLUTION:

login := exec.Command(cmd, "login) 

var b bytes.Buffer 
b.Write([]byte(username + "\n" + pwd + "\n")) 

login.Stdout = os.Stdout 
login.Stdin = &b 
login.Stderr = os.Stderr 
+0

あなたのstdinをサブプロセス 'stdinとループすることができます。 –

答えて

1

私はあなたがそのためのbytes.Bufferを使用することができます想像してみてください。そのような 何か(テストしていません):

login := exec.Command(cmd, "login") 

buffer := bytes.Buffer{} 
buffer.Write([]bytes("username\npassword\n") 

login.Stdout = os.Stdout 
login.Stdin = buffer 
login.Stderr = os.Stderr 

err := login.Run() 
if err != nil { 
    fmt.Fprintln(os.Stderr, err) 
} 

トリックは標準入力が単なるchar型のバッファであるということです、そして資格情報を読むとき、それは単に\n文字(または多分\n\rを)遭遇するまで文字を読みます。したがって、バッファにあらかじめ書き込んでおき、バッファに直接コマンドを送ることができます。

関連する問題