dongxue9997 2018-11-01 11:31
浏览 1784
已采纳

在go中使用curl和命令

I'm using Go with command to execute curl which works as expected

curl := exec.Command("curl", "https://services.odata.org/V3/northwind/northwind.svc/")
    out, err := curl.Output()
    if err != nil {
        fmt.Println("erorr" , err)
        return
    }
    fmt.Println(out)

Now I want to use some placeholders like

curl -O http://quiet-waters-1228.herokuapp.com/assets/image.jpg

but now I need to get the url for command e.g. if I run in bash mytool url I got the url value

`curl -O $(mytool url)`

The problem is that we need to execute the command in the code and I'm not sure how to pass it

curl := exec.Command("curl", "curl -O $(url)")
        out, err := curl.Output()
        if err != nil {
            fmt.Println("erorr" , err)
            return
        }
        fmt.Println(out)
  • 写回答

1条回答 默认 最新

  • dqz84361326 2018-11-01 11:36
    关注

    In os package you have slice of strings which contains all arguments passed by shell to your program.

    os.Args 0th value, i.e., first element is going to be name of the command itself.

    If your tool command is mytool, os.Args[0] contains mytool.

    Rest are going to be the arguments, which are passed by shell.

    package main
    
    import (
        "log"
        "os"
        "os/exec"
    )
    
    func main() {
    
        if len(os.Args) < 2 {
            // If argument is not provided quit
            log.Fatalln("url not provided")
        }
        url := os.Args[1] // URL
    
        cmd := exec.Command("curl", "-O", url)
        cmd.Run()
    }
    

    You can also download multiple URLs concurrently,

    var wg *sync.WaitGroup
    
    func main() {
        urls := os.Args[1:]
    
        wg = new(sync.WaitGroup)
        wg.Add(len(urls))
    
        for _, url := range urls {
            go download(url)
        }
    
        wg.Wait()
    }
    
    func download(url string) {
        defer wg.Done()
        cmd := exec.Command("curl", "-O", url)
        cmd.Run()
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 微信小游戏反编译后,出现找不到分包的情况
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)