package mainimport ( "bytes" "fmt" //"log" "os/exec")func main() { cmd := exec.Command("dir") var stdout, stderr bytes.Buffer cmd.Stdout = &stdout cmd.Stderr = &stderr err := cmd.Run() if err != nil { fmt.Printf("cmd.Run: %s failed: %s\n", err, err) } outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes()) if len(errStr) > 1 { fmt.Printf("out:\n%s\nerr:\n%s\n", outStr, errStr) } fmt.Printf(outStr)}*大家好,每当我尝试使用 go 运行此文件时,它都会显示此错误“cmd.Run:exec:“dir”:在 %PATH% 中找不到可执行文件失败:”。我的 PATH 中有 golang 但它仍然失败 *
1 回答
红糖糍粑
TA贡献1815条经验 获得超6个赞
dir在 Windows 中不是可执行文件,而是命令提示符的内部命令。您需要将 dir 传递给命令提示符。您的命令将如下所示:
cmd.exe /c 目录
你可以这样实现它:
args := strings.Split("/c dir"," ")
cmd := exec.Command("cmd.exe",args...)
像这样传递命令行参数,strings.Split() 会将“/c dir”拆分为所有由“”分隔的子字符串,并返回这些分隔符之间的一部分子字符串。
此外,如果您需要打印特定位置的目录,您可以设置命令的工作目录:
cmd.Dir = filepath.Join("C:","Windows")
filepath.Join 将任意数量的路径元素连接到一个路径中,用操作系统特定的分隔符将它们分开。
将以下包添加到您的文件中
导入(“操作系统”“路径/文件路径”“字符串”)
要打印结果,您可以将输出和错误连接到标准输出和标准错误。
cmd.Stdout = os.Stdout cmd.Stderr = &os.Stderr
您的整体代码将是:
package main import ( "fmt" "os" "os/exec" "path/filepath" "strings")func main() { args := strings.Split("/c dir"," ") cmd := exec.Command("cmd.exe",args...) cmd.Dir = filepath.Join("C:","Windows") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err := cmd.Run() if err != nil { fmt.Printf("cmd.Run: %s failed: %s\n", err, err) } }
- 1 回答
- 0 关注
- 160 浏览
添加回答
举报
0/150
提交
取消