我正在使用 Go 和命令来执行,curl
它按预期工作
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)
Run Code Online (Sandbox Code Playgroud)
现在我想使用一些占位符,例如
curl -O http://quiet-waters-1228.herokuapp.com/assets/image.jpg
Run Code Online (Sandbox Code Playgroud)
但现在我需要获取命令的 url,例如,如果我在 bash 中运行,mytool url
我会得到 url 值
`curl -O $(mytool url)`
Run Code Online (Sandbox Code Playgroud)
问题是我们需要执行代码中的命令,但我不知道如何传递它
curl := exec.Command("curl", "curl -O $(url)")
out, err := curl.Output()
if err != nil {
fmt.Println("erorr" , err)
return
}
fmt.Println(out)
Run Code Online (Sandbox Code Playgroud)
在os
包中,您有一段字符串,其中包含 shell 传递给程序的所有参数。
os.Args
第 0 个值,即第一个元素将是命令本身的名称。
如果您的工具命令是mytool
, os.Args[0]
contains mytool
.
其余部分将是由 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()
}
Run Code Online (Sandbox Code Playgroud)
您还可以同时下载多个 URL,
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()
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12371 次 |
最近记录: |