Golang中运行Windows命令的简单方法

Golang中运行Windows命令的简单方法 大家好,我是Go语言的新手,很兴奋能使用它。我想尝试将我的一些Perl脚本移植到Go作为学习练习。

目前我正在尝试运行"ping -c 20 8.8.8.8"作为测试示例;但是,我的代码只返回"exit status 1"。此外,我想查看输出 - 猜测是"stdout"??;但不确定我是否在从Go文档拼凑的代码中正确实现了这一点。

import (
  "log"
  "fmt"
  "os/exec"
)

func main() {
   c, err  := exec.Command("cmd","ping","-c 1","8.8.8.8").CombinedOutput()
   if err != nil{
    log.Fatal(err)
   } else {
    fmt.Printf("%s\n",c)
   }
}

我还在学习阶段,所以非常感谢任何帮助。

谢谢


更多关于Golang中运行Windows命令的简单方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

感谢您的帮助和建议。学习Go语言既有趣又有收获,虽然有时也会遇到困难。

package main

import (
  "fmt"
  "os/exec"
)

func main() {
   c,_ := exec.Command("ping","-n","1","8.8.8.8").CombinedOutput()
   s := string(c)

    fmt.Printf("%s\n",s)

}

我按照您的建议更新了代码:

s := string( c )

不过在Windows系统上,我仍然需要指定"ping"和".CombineOutput()"才能使其正常工作。

再次感谢您的帮助。

更多关于Golang中运行Windows命令的简单方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


  1. exec.Command() 创建一个要运行的命令,但不会立即执行。第一个参数指定要运行的程序,其余所有参数都是该程序的参数。
  2. CombinedOutput() 运行程序并返回标准输出和标准错误的组合输出作为字节切片。如果错误不是 nil,表示命令以非零退出代码结束,或者可能无法找到该命令。

有两点需要注意。如果你希望将输出转换为字符串,可以像这样轻松转换:

s := string(c)

我认为你不需要使用 cmd 来运行命令。命令本身是独立存在的,所以你应该能够像这样运行它:exec.Command("ping", "-c 1", "8.8.8.8")

在Go中运行Windows命令时,需要正确使用cmd的参数格式。你的代码有两个主要问题:

  1. Windows的ping命令使用-n而不是-c来指定次数
  2. 参数应该分开传递,而不是合并在一起

以下是修正后的代码:

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    // 在Windows中,使用cmd /C来执行命令
    // ping命令使用-n指定次数,而不是-c
    cmd := exec.Command("cmd", "/C", "ping", "-n", "20", "8.8.8.8")
    
    // 获取命令的标准输出和标准错误
    output, err := cmd.CombinedOutput()
    if err != nil {
        log.Fatal("命令执行失败:", err)
    }
    
    // 打印命令输出
    fmt.Printf("命令输出:\n%s\n", output)
}

如果你想要分别处理标准输出和标准错误,可以使用以下方式:

package main

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

func main() {
    cmd := exec.Command("cmd", "/C", "ping", "-n", "20", "8.8.8.8")
    
    var stdout, stderr bytes.Buffer
    cmd.Stdout = &stdout
    cmd.Stderr = &stderr
    
    err := cmd.Run()
    if err != nil {
        log.Fatal("命令执行失败:", err, "\n错误输出:", stderr.String())
    }
    
    fmt.Printf("标准输出:\n%s\n", stdout.String())
    fmt.Printf("错误输出:\n%s\n", stderr.String())
}

关键点说明:

  • cmd /C 告诉命令提示符执行完命令后退出
  • -n 20 在Windows中指定ping的次数
  • CombinedOutput() 返回标准输出和标准错误的合并内容
  • 分开处理StdoutStderr可以让你更精确地控制输出

第一个示例应该能解决你的问题并显示ping命令的完整输出。

回到顶部