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
感谢您的帮助和建议。学习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
exec.Command()创建一个要运行的命令,但不会立即执行。第一个参数指定要运行的程序,其余所有参数都是该程序的参数。CombinedOutput()运行程序并返回标准输出和标准错误的组合输出作为字节切片。如果错误不是 nil,表示命令以非零退出代码结束,或者可能无法找到该命令。
有两点需要注意。如果你希望将输出转换为字符串,可以像这样轻松转换:
s := string(c)
我认为你不需要使用 cmd 来运行命令。命令本身是独立存在的,所以你应该能够像这样运行它:exec.Command("ping", "-c 1", "8.8.8.8")
在Go中运行Windows命令时,需要正确使用cmd的参数格式。你的代码有两个主要问题:
- Windows的
ping命令使用-n而不是-c来指定次数 - 参数应该分开传递,而不是合并在一起
以下是修正后的代码:
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()返回标准输出和标准错误的合并内容- 分开处理
Stdout和Stderr可以让你更精确地控制输出
第一个示例应该能解决你的问题并显示ping命令的完整输出。

