我想运行exec.Command("git", "config", "--global", "user.name")并读取输出。
在windows上,单词"git"转换为git路径(C:\Program Files\...\git.exe)。然后尝试运行C:\Program (这不是一个可执行文件的路径)。
我试着转义这个空间,我试着在路径周围添加括号,或者只在空间周围加上括号并将它们转义。什么都没用。
arg0 := "config"
arg1 := "--global"
arg2 := "\"user.name\""
bcmd := exec.Command("git", arg0, arg1, arg2)
var stdout bytes.Buffer
bcmd.Stdout = &stdout
err := bcmd.Run() 我试过加括号,但没有用。
发布于 2022-08-17 14:05:20
您不应该为arg2使用引号。至于阅读输出,则取决于您通过阅读所理解的内容。输出将被写入缓冲区,在您的情况下,缓冲区是stdout。您可以使用stdout.Bytes()获得输出的字节,如果您想要实际的string (我假设您确实想要),可以使用string(stdout.Bytes())将其转换为string。
package main
import (
"bytes"
"fmt"
"log"
"os/exec"
)
func main() {
bcmd := exec.Command("git", "config", "--global", "user.name")
var stdout bytes.Buffer
bcmd.Stdout = &stdout
err := bcmd.Run()
if err != nil {
log.Fatal(err)
}
fmt.Printf(string(stdout.Bytes()))
}还有另一种更简单的方法来使用Output()来做同样的事情。
package main
import (
"fmt"
"log"
"os/exec"
)
func main() {
outputBytes, err := exec.Command("git", "config", "--global", "user.name").Output()
if err != nil {
log.Fatal(err)
}
fmt.Printf(string(outputBytes))
}两者都将打印您的git用户名。
https://stackoverflow.com/questions/73389511
复制相似问题