s := fmt.Sprintf(`"top -bn2 | fgrep 'Cpu(s)' | tail -1"`, host)
log.Printf("top = %s\n", s)
cmd := exec.Command("bash", "-c", s)
b, e := cmd.Output()
if e != nil {
log.Printf("failed due to :%v\n", e)
panic(e)
}
log.Printf("%v\n", string(b))
raw := string(b)
这就是你可能会做,如果你打算在批处理模式上运行。如果你想选择最后一个,而不是捕获所有内容,注意尾部-1也许是有价值的,而如果你要为特定的字段grep,fgrep会很有用 - 但是这不是必须的。
仅供参考,以下是运行top的其他方法。
c := exec.Command("top")
c.Stdin = os.Stdin
c.Stdout = os.Stdout
c.Stderr = os.Stderr
c.Run()
这是为本地。如果要启动服务器
c := exec.Command("ssh", "-t", "localhost", "top")
c.Stdin = os.Stdin
c.Stdout = os.Stdout
c.Stderr = os.Stderr
c.Run()
,并连接为通过Telnet客户端和顶部远程运行使用,当在上面的命令远程登录屏幕结果显示(常见的情况 - 如果您通过SSH看,使用这个去反思服务器可能)使用此 -
func main() {
l, _ := net.Listen("tcp", "127.0.0.1:12345")
for {
c, _ := l.Accept()
go func() {
handle(&c)
}()
}
}
func handle(c *net.Conn) {
cmd := exec.Command("top")
cstdout, _ := cmd.StdoutPipe()
go io.Copy(bufio.NewWriter(*c), bufio.NewReader(cstdout))
cmd.Run()
}
如果您正在使用Telnet和SSH运行像应用通用命令使用这个库建设终端 - https://github.com/kr/pty
编辑打算让它更好......这是一个适用于PTY的例子,场景是如果你使用ssh -t来运行一个命令,想从这个服务器类型设置中与telneting进行交互,例如顶部使用此:
cmd := exec.Command("ssh", "-t", "localhost", "top")
f, _ := pty.Start(cmd)
go io.Copy(bufio.NewWriter(*c), f)
go io.Copy(f, bufio.NewReader(*c))
go io.Copy(bufio.NewWriter(*c), os.Stdin)
cmd.Run()