我正在尝试使用Go检查计算机上安装了哪个版本的Nginx。
这是我的摘录:
package main
import (
"bytes"
"errors"
"fmt"
"os/exec"
)
func runCommand(command string, arg ...string) (string, error) {
cmd := exec.Command(command, arg...)
cmdOutput := &bytes.Buffer{}
errOutput := &bytes.Buffer{}
cmd.Stdout = cmdOutput
cmd.Stderr = errOutput
err := cmd.Run()
if err != nil {
return "", errors.New(string(errOutput.Bytes()))
}
fmt.Println("Command succeeded")
return string(cmdOutput.Bytes()), nil
}
func getVersion(command string, arg ...string) {
path, err := exec.LookPath(command)
if err != nil {
fmt.Println("No path for " + command + " found")
return
}
fmt.Println("Path for " + command + " is " + path)
result, err := runCommand(path, arg...)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(command + " version is: " + result)
}
func main() {
getVersion("go", "version") // works
getVersion("nginx", "-v") // does not work
getVersion("firefox", "-v") // works
}
对于Go和Firefox,它可以正常工作,但是对于Nginx,它既不返回版本也不返回错误。似乎返回了一个空字符串...
查看权限: Firefox文件是指向root:root拥有的,权限为755的sh文件的符号链接。 Nginx文件也由root:root拥有,权限为755。
当然,运行命令nginx -v
是可行的。
答案 0 :(得分:2)
您期望从stdout输出。它正在打印到stderr。尝试cmd.CombinedOutput()