go - 如何使用 golang 运行 dir 命令?

标签 go

这是我的代码:

package main

import (
    "bytes"
    "fmt"
    "io"
    "os/exec"
)

func runCommand(command string) io.Writer{
    cmdName := "cmd.exe"
    cmdArgs := []string{"/c", command}
    fmt.Println("Running command: " + command)
    cmd := exec.Command(cmdName, cmdArgs...)
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    cmd.Run()
    return cmd.Stdout

}
func main(){
    fmt.Println(runCommand("dir"))  // Prints the output of dir for the current directory
    fmt.Println(runCommand("dir C:\\")) // Prints nothing
    fmt.Println(runCommand("dir C:\\Users\\"))  //Prints the output of dir for the users directory
    fmt.Println(runCommand("dir C:\\..\\"))  // Prints the output of dir for the C drive (What I want)
}

我希望当我执行 dir C:\ 时,我会得到输出,就像我在 Windows 命令提示符下运行一样。相反,我什么也得不到。有趣的是,运行 dir 时任何其他路径都可以正常工作。我什至可以看到 C:\ 如果我改为执行 C:\..\ 这是为什么?我不明白为什么会这样,我给它的所有其他 Windows 命令都可以正常工作。

最佳答案

首先,永远不要忽视错误。对 cmd.Run() 的调用返回错误,您应该始终检查它:

if err := cmd.Run(); err != nil {
    fmt.Printf(os.Stderr, "%v", err)
}

尝试一下,您可能会明白命令失败的原因。

在不知道错误的情况下,很难解决您的问题,但我猜您需要将字符串 command 拆分为多个字段并将它们附加到 cmdArgs .当运行 runCommand("dir C:\\") 时,你的 cmdArgs 实际上是 []string{"/c", "dir C:\\"),我觉得应该是[]string{"/c", "dir", "C:\\"}。看一下函数 strings.Split(string, string) ,它可能对你有帮助。但这只是一个猜测,我们需要知道您遇到的确切错误消息才能找到正确的解决方案:)

关于go - 如何使用 golang 运行 dir 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739895/

相关文章:

go - 为什么用 ParseInLocation 打印不同的时区?

go - 反向代理不起作用

go - 跨 channel 范围还是使用选择更好?

mysql - 从非sql查询获取结果集

go - 如何使用 glide golang 安装私有(private)仓库

go - 我如何最好地鸭式这个 Go Disjoint Sets 数据结构?

http - (Go)发送http请求时如何控制gzip压缩?

go - 给定一个端口,在 Golang 中返回相应的服务(例如 http、ssh...)

json - 在golang中解析变量中的Json

go - 错误检测,选择 channel