2016-04-03 30 views
0

我有以下代碼執行外部命令並輸出到控制檯兩個等待用戶輸入的字段。 一個用於用戶名和其他密碼,然後我手動添加它們。去 - 寫入外部命令的stdin

任何人都可以給我一個關於如何寫入stdin以便從程序內部輸入這些輸入的提示嗎?

對我來說訣竅是有兩個不同的領域等待輸入,我很難找出如何填充一個接一個。

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循環讀取你的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) 
} 

的訣竅是,標準輸入僅僅是一個字符緩衝區,並讀取憑據時,它只會讀取字符,直到遇到\n字符(或者\n\r)。所以你可以預先寫入緩衝區,並直接將緩衝區送入命令...