windows - 在 golang 中运行 windows 命令
问题描述
我已经看到了从 Golang 程序运行 windows 命令的现有解决方案,但没有一个对我有用。.png
我的目标是从 go 程序中打开一个文件。
下面是示例程序。它不会打开图像文件。我只是在尝试dir
测试。
package main
import (
"log"
"os"
"os/exec"
"runtime"
)
func main() {
cmd := exec.Command("ls", "-lah")
if runtime.GOOS == "windows" {
cmd = exec.Command("cmd", "dir")
}
cmd.Stdout = os.Stdout
err := cmd.Run()
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
}
}
我也在cmd = exec.Command("dir")
第 13 行尝试过。程序只是存在,没有任何错误或输出。似乎成功执行,因为没有向我显示错误。我尝试了一些变化,但没有成功。
我正在使用 VSCode 并尝试通过内置cmd
和wsl
VSCode 运行该程序。当我wsl
用来运行程序时,它显示了ls -lah
cmd 的输出,但没有显示任何内容。我不知道是否有某种方法可以指导 Windows 输出。任何帮助表示赞赏。谢谢。
解决方案
cmd.exe 是 windows 命令解释器;如果您希望将命令传递给它以运行,您需要使用 /c 参数 - 例如cmd /c dir
。如果您cmd dir
在命令提示符下输入,您将获得与当前 go 应用程序相同的结果(除了由于缺少标准输入,cmd 提示符不会自动关闭)。如果你运行cmd /?
这被解释为:
/C 执行字符串指定的命令,然后终止
因此,要修复您的应用程序,请使用以下命令:
cmd = exec.Command("cmd", "/c", "dir")
另一种方法是通过标准输入传递命令:
cmd := exec.Command("cmd")
cmd.Stdout = os.Stdout
stdin, err := cmd.StdinPipe()
if err != nil {
log.Fatal(err)
}
go func() {
defer stdin.Close()
io.WriteString(stdin, "dir\n")
}()
err = cmd.Run()
if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
}
打开 BMP 文件的一种简单方法是cmd = exec.Command("explorer.exe", "test.bmp")
(这将使用默认应用程序打开它)。
注意:您首先需要运行的原因cmd
是这dir
是由提供的内部命令cmd.exe
(如果您dir dir.* /s
在 windows 文件夹中运行,您将找不到任何东西,因为没有dir.exe
或类似的;它嵌入在 中cmd.exe
)。
注意2:如果您以这种方式运行 ls/dir 来获取文件夹的内容(而不是作为示例),那么ioutil.ReadDir是一个更好的选择。
推荐阅读
- sql - 如何将多行数据显示为一个字符串
- android - 本地数据同步到现场
- javascript - mongo db查询检查是否不存在具有匹配值的其他文档
- javascript - 如果刷新令牌已使用 axios 过期,则正确重定向用户
- javascript - 收到以下错误“失败:未知错误:a.tagName.toUpperCase 不是函数”
- r - 如何以编程方式评估空 quosure?
- json - Gtmetrix 使用本机反应获取报告
- angular - Angular - 如何将角度变量绑定到 html 并显示
- android - 如何让 Firebase 在数据库的三个不同区域显示相同的 ID?
- javascript - TypeError: undefined is not an object (evaluating 'store.getState')