2016-04-03 58 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)。所以你可以预先写入缓冲区,并直接将缓冲区送入命令...