python 下有什么 tui 可以画折线图?

图片.png

这是一个 nvtop 的程序画出来的折线图

可以反应显卡的利用率和内存占用率的时序变化

我想用 python 写一个的话,有什么 tui 可以让我方便的实现呢?

这个 nvtop 是 c 写的,我不懂 c

我看到 python 下有两个出名的 tui 包

  • textual
  • pytermgui

但是其中都没有画折线图的 demo 代码样例

谁能帮帮我?

阅读 2.7k
3 个回答
新手上路,请多包涵
  1. ASCIIGraph:可以轻松地将数据转换为文本表格或折线图
from asciigraph import AsciiGraph
graph = AsciiGraph()
data = [10, 12, 13, 14, 12, 10]
print(graph.plot(data))
  1. termplotlib:在终端中绘制折线图的Python库,它使用Matplotlib进行绘图
from termplotlib import plot
data = [10, 12, 13, 14, 12, 10]
plot(data)
  1. console-line-chart:可以绘制简单的折线图
from console_line_chart import ConsoleLineChart
data = [10, 12, 13, 14, 12, 10]
chart = ConsoleLineChart()
chart.plot(data)

glances、nvitop 用的是 curses,curses 是标准库里面的

使用 curses 实现一个按照内存使用率升序排序的 『简易htop』

import curses
import psutil

def draw_header(stdscr):
    stdscr.addstr(0, 2, "PID")
    stdscr.addstr(0, 10, "Name")
    stdscr.addstr(0, 40, "CPU (%)")
    stdscr.addstr(0, 50, "Memory (%)")

def draw_processes(stdscr, processes):
    max_y, max_x = stdscr.getmaxyx()
    for i, process in enumerate(processes, start=1):
        if i >= max_y:
            break
        stdscr.addstr(i, 2, str(process.info['pid']))
        stdscr.addstr(i, 10, process.info['name'])
        stdscr.addstr(i, 40, f"{process.info['cpu_percent']:.1f}")
        stdscr.addstr(i, 50, f"{process.info['memory_percent']:.1f}")

def main(stdscr):
    curses.curs_set(0)
    stdscr.clear()
    stdscr.refresh()

    # 获取进程信息
    processes = list(psutil.process_iter(attrs=['pid', 'name', 'cpu_percent', 'memory_percent']))
    processes = sorted(processes, key=lambda p: p.info['memory_percent'], reverse=True)

    while True:
        stdscr.clear()
        draw_header(stdscr)
        draw_processes(stdscr, processes)
        stdscr.refresh()
        stdscr.getch()

curses.wrapper(main)

图片.png

推荐问题