使用sftp << INPUT 通过golang的os/exec

huangapple go评论82阅读模式
英文:

Using sftp << INPUT via golang os/exec

问题

我想做的是通过SFTP从我的服务器导出一个文件,使用的是golang语言。

以下是有问题的代码:

cmd = exec.Command("sftp", "login@sftp.com", `INPUT
    cd /some/path
    put file.gz
    quit
    INPUT`)
cmd.Stderr = &stderr
err = cmd.Run()
if err != nil {
    fmt.Println(stderr.String())
    os.Exit(1)
}
fmt.Println("done")

它会打印出 "done",但是不会导入 "file.gz"。

英文:

What I want to do is exporting a file from my server via SFTP, in golang.

Here is the troubling code

cmd = exec.Command(&quot;sftp&quot;, &quot;login@sftp.com&quot;, `INPUT
    cd /some/path
    put file.gz
    quit
    INPUT`)
cmd.Stderr = &amp;stderr
err = cmd.Run()
if err != nil {
	fmt.Println(stderr.String())
	os.Exit(1)
}
fmt.Println(&quot;done&quot;)

It gets to done but doesn't import file.gz.

答案1

得分: 1

我终于找到了解决方案。

cmd = exec.Command("sftp", "login@sftp.com")
cmd.Stdin = strings.NewReader(`cd some/path
put file.gz
quit`)
cmd.Stderr = &stderr
err = cmd.Start()
if err != nil {
    fmt.Println(stderr.String())
    fmt.Println(err)
    os.Exit(1)
}
err = cmd.Wait()

我通过设置cmd.Stdin来设置我在STFP中需要执行的命令。

cmd.Start()cmd.Wait()分别启动命令并在整个命令完成后停止。

英文:

I finally found the solution.

cmd = exec.Command(&quot;sftp&quot;, &quot;login@sftp.com&quot;)
cmd.Stdin = strings.NewReader(`cd some/path
put file.gz
quit`)
cmd.Stderr = &amp;stderr
err = cmd.Start()
if err != nil {
	fmt.Println(stderr.String())
	fmt.Println(err)
	os.Exit(1)
}
err = cmd.Wait()

I set the commands I need to do once I'm in the STFP by setting cmd.Stdin

cmd.Start() and cmd.Wait() starts the command and stops when the whole command is done.

huangapple
  • 本文由 发表于 2017年1月25日 00:49:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/41833802.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定