从 cmd ping
Pinging from cmd
我有这个应用程序需要 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)
当我更改 args 时,它挂起。
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() failed with exec: "ping -c 5": executable file not found in
$PATH
我正在使用 go mod 作为我的依赖项。
知道我做错了什么吗?
ping
命令无限期地运行,这就是它似乎挂起的原因 - ping
永远不会退出。您可以通过使用 -c
参数限制 ping 尝试次数来强制它退出,例如
ping -c 5 goole.com
将尝试 5 次 ping。这是 shell 形式。在您的代码中,使用:
cmd = exec.Command("ping", "-c1", "goole.com")
https://www.goole.com
失败,因为 ping
需要主机名,而不是 URL。
- 错误是因为你提到了
https
。尝试 运行 为
cmd = exec.Command("ping", "www.google.com")
或简单的 "google.com"
也应该有效。
- 第一个挂起的原因是因为您调用
ping
时没有任何其他无限运行 ping 的参数。所以尝试用 args -c
来调用它,它提到了计数。
这应该有效。
cmd := exec.Command("ping", "-c" , "3", "google.com")
更好的是,使用更小的间隔 -i 0.1
或您认为合适的东西使其更快。但请确保添加 -c
.
为什么要生成一个进程来 ping 一个 IP 地址?试试 go-ping
, one of several packages that implement ICMP 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)
当我更改 args 时,它挂起。
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() failed with exec: "ping -c 5": executable file not found in $PATH
我正在使用 go mod 作为我的依赖项。 知道我做错了什么吗?
ping
命令无限期地运行,这就是它似乎挂起的原因 - ping
永远不会退出。您可以通过使用 -c
参数限制 ping 尝试次数来强制它退出,例如
ping -c 5 goole.com
将尝试 5 次 ping。这是 shell 形式。在您的代码中,使用:
cmd = exec.Command("ping", "-c1", "goole.com")
https://www.goole.com
失败,因为 ping
需要主机名,而不是 URL。
- 错误是因为你提到了
https
。尝试 运行 为
cmd = exec.Command("ping", "www.google.com")
或简单的 "google.com"
也应该有效。
- 第一个挂起的原因是因为您调用
ping
时没有任何其他无限运行 ping 的参数。所以尝试用 args-c
来调用它,它提到了计数。 这应该有效。
cmd := exec.Command("ping", "-c" , "3", "google.com")
更好的是,使用更小的间隔 -i 0.1
或您认为合适的东西使其更快。但请确保添加 -c
.
为什么要生成一个进程来 ping 一个 IP 地址?试试 go-ping
, one of several packages that implement ICMP ping.