登录
首页 >  Golang >  Go问答

使用命令行执行 Ping 命令

来源:stackoverflow

时间:2024-02-15 15:03:22 338浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《使用命令行执行 Ping 命令》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我有这个应用程序,需要 ping google.com 以查看网络连接是否有效。

以下代码可以正常工作并列出目录内容:

cmd = exec.command("ls", "-lah")
var stdout, stderr bytes.buffer
cmd.stdout = &stdout
cmd.stderr = &stderr
err = cmd.run()
if err != nil {
    log.fatalf("cmd.run() failed with %s\n", err)
}
outstr, errstr := string(stdout.bytes()), string(stderr.bytes())
fmt.printf("out:\n%s\nerr:\n%s\n", outstr, errstr)

当我更改参数时,它会挂起。

cmd = exec.command("ping", "goole.com")

这会导致错误:cmd.run() 失败,退出状态为 2

cmd = exec.command("ping", "https://www.goole.com")

我将参数更改为:

cmd = exec.Command("ping -c 5", "goole.com")

我明白了

cmd.run() 执行失败:“ping -c 5”:在以下位置找不到可执行文件 $路径

我正在使用 go mod 作为我的依赖项。 知道我做错了什么吗?


正确答案


  1. 该错误是因为您提到了 https。尝试运行为

cmd = exec.command("ping", "www.google.com") 或简单的 "google.com" 也应该可以工作。

  1. 第一个挂起的原因是因为您在调用 ping 时没有任何其他参数无限地运行 ping。因此,请尝试使用参数 -c 来调用它,其中提到了计数。 这应该可行。

cmd := exec.command("ping", "-c", "3", "google.com")

更好的是,使用较小的间隔 -i 0.1 或您认为合适的值使其更快。但请确保添加 -c

ping 命令无限期运行,这就是它似乎挂起的原因 - ping 永远不会退出。您可以通过使用 -c 参数限制 ping 尝试次数来强制退出,例如

ping -c 5 goole.com 将尝试 5 次 ping。这是外壳形式。在您的代码中,使用:

cmd = exec.Command("ping", "-c1", "goole.com")

https://www.goole.com 失败,因为 ping 需要主机名,而不是 url。

本篇关于《使用命令行执行 Ping 命令》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>