因为一些原因,需要用 go 执行无交互的 Telnet
命令并获取输出的数据
命令是这样:
(echo "keys *"; sleep 0.02) | telnet 127.0.0.1 6379
直接在终端下执行,返回如下:
https://i.imgur.com/qMU7vYG.png
然后我写了下面的代码来测试
//main.go
package main
import (
"bytes"
"flag"
"os/exec"
)
func main(){
c := flag.String("c", "ifconfig", "ifconfg")
flag.Parse()
var cmd *exec.Cmd
var stdout bytes.Buffer
var stderr bytes.Buffer
cmd = exec.Command("bash", "-c", *c)
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
if err == nil {
print(stdout.String())
} else {
print(stderr.String())
}
}
执行命令:
go run main.go -c "(echo \"keys *\"; sleep 0.02) | telnet 127.0.0.1 6379"
输出的内容为:Connection closed by foreign host.
我最后测试下面这条命令后,上面的程序就可以成功获取到直接在终端下执行非交互命令的输出了
go run main.go -c "(echo \"keys *\"; sleep 0.02) | telnet 127.0.0.1 6379" > 1.txt; cat 1.txt; rm 1.txt
https://i.imgur.com/6LghpDl.png
上面的实际上是将 Telnet 的输出写入到文件里面,然后 cat 这个文件(cat 是标准输出),golang 执行命令的话就能获取到了
还有没有同学有更优雅的命令
来实现 golang 读取 Telnet 的输出啊(不改 go 代码)
先谢谢了~~~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.