watch 50 行代码实现 windows watch
最近想监控 gpu 使用情况,无奈在 windows 上没有 watch 指令,nvidia-smi -lms 20
自带输出也不美观,那么为何不自己写个工具来监控呢。
如下图可以看到 gpu 温度和功耗的变动情况
下面使用 50 行代码来实现 watch nvidia-smi 功能。
package main
import (
"bufio"
"bytes"
"fmt"
"log"
"os/exec"
"time"
)
func LineMoveUp(n int) {
fmt.Printf("\033[%dA", n)
}
func HideCursor() {
fmt.Printf("\033[?25l")
}
func ShowCursor() {
fmt.Printf("\033[?25h")
}
// https://en.wikipedia.org/wiki/ANSI_escape_code
// CSI (Control Sequence Introducer) sequences
func main() {
for true {
out, err := exec.Command("nvidia-smi").Output()
if err != nil {
log.Fatal(err)
}
HideCursor()
scanner := bufio.NewScanner(bytes.NewReader(out))
line := 0
for scanner.Scan() {
fmt.Printf("%s\n", scanner.Text())
line++
if line > 12 {
break
}
}
LineMoveUp(line)
time.Sleep(150 * time.Millisecond)
ShowCursor()
}
}