为了账号安全,请及时绑定邮箱和手机立即绑定

从 cmd ping

从 cmd ping

Go
慕码人8056858 2022-11-23 14:12:22

我有这个应用程序需要 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() failed with exit status 2


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

在我将 args 更改为:


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

我得到


cmd.Run() 因 exec 失败:“ping -c 5”:在 $PATH 中找不到可执行文件


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


查看完整描述

3 回答

?
偶然的你

TA贡献1567条经验 获得超3个赞

  1. 错误是因为你提到了https. 尝试运行为

cmd = exec.Command("ping", "www.google.com")或者简单地"google.com"也应该工作。

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

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

更好的是,以更小的间隔-i 0.1或您认为合适的方式使其更快。但请确保您添加了-c.


查看完整回答
反对 回复 2022-11-23
?
白衣非少年

TA贡献874条经验 获得超0个赞

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

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

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

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


查看完整回答
反对 回复 2022-11-23
?
Smart猫小萌

TA贡献1608条经验 获得超7个赞

为什么要生成一个进程来 ping 一个 IP 地址?尝试go-ping实现 ICMP ping 的几个包之一。



查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信