普通网友
2016-11-07 23:09
浏览 47
已采纳

向同一子进程golang写入两次

I have a simple scp function that is just a wrapper over the scp cli tool.

type credential struct {
    username string
    password string
    host     string
    port     string
}

func scpFile(filepath, destpath string, c *credential) error {
    cmd := exec.Command("scp", filepath, c.username+"@"+c.host+":"+destpath)

    if err := cmd.Run(); err != nil {
        return err
    }

    fmt.Println("done")
    return nil
}

This works just fine now I want to add the capability of putting in a password the SSH if scp needs it. This is what I came up with

func scpFile(filepath, destpath string, c *credential) error {
    cmd := exec.Command("scp", filepath, c.username+"@"+c.host+":"+destpath)
    stdin, err := cmd.StdinPipe()
    if err != nil {
        return err
    }
    defer stdin.Close()

    if err := cmd.Start(); err != nil {
        return err
    }

    io.WriteString(stdin, c.password+"
")
    cmd.Wait()
    fmt.Println("done")
    return nil
}

This does not work as the password prompt just hangs there. I tried adding a 1 second sleep before I re write to stdin thinking maybe I was writing the password to fast but did not make a difference.

图片转代码服务由CSDN问答提供 功能建议

我有一个简单的 scp 函数,它只是对 scp的包装 cli工具。

 类型凭据结构{
用户名字符串
密码字符串
主机字符串
端口字符串
} 
 
func scpFile(  filepath,destpath字符串,c * *凭据)错误{
 cmd:= exec.Command(“ scp”,filepath,c.username +“ @” + c.host +“:” + destpath)
 
如果err:=  cmd.Run();  err!= nil {
 return err 
} 
 
 fmt.Println(“ done”)
 return nil 
} 
   
 
 

很好,现在我想添加在scp需要时输入SSH密码的功能。 这就是我想出的

  func scpFile(文件路径,destpath字符串,c *凭据)错误{
 cmd:= exec.Command(“ scp”,filepath,  c.username +“ @” + c.host +“:” + destpath)
 stdin,err:= cmd.StdinPipe()
如果err!= nil {
 return err 
} 
延迟stdin.Close(  )
 
如果err:= cmd.Start();  err!= nil {
 return err 
} 
 
 io.WriteString(stdin,c.password +“ 
”)
 cmd.Wait()
 fmt.Println(“ done”)
返回 nil 
} 
   
 
 

这不起作用,因为密码提示仅挂在那里。 在尝试重新写入 stdin 之前,我尝试添加1秒钟的睡眠时间,以为我可能是在快速写入密码,但并没有改变。

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题