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

图片.png

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

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

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

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

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

  • textual
  • pytermgui

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

谁能帮帮我?

阅读 2.6k
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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题