实时监控系统的内存占用率和CPU占用率的另一种实现。
同样来自知乎回形针的文章,并参考了下面的链接
# original author: 回形针 # https://HdhCmsTestzhihu测试数据/question/21100416/answer/208143599 # 参考链接 https://HdhCmsTestcnblogs测试数据/whyaza/p/9462831.html
源代码如下:
# -*- coding:utf-8 -*- # python 3.7.3 # psutil 5.6.3 # 实时监控系统的内存占用率和CPU占用率,两行显示,并刷新 import psutil import os import time import sys #获取当前运行的pid p1=psutil.Process(os.getpid()) while True: memory = psutil. Virtual _memory().percent #内存占用率 cpu = psutil.cpu_percent(interval=1.0) #cpu占用率 # 第一种方法:print ,失败-_-|| #print("\r","内存占用率:{:<8} CPU占用率:{:<8}".format(memory,cpu),end="",flush=True) # 第一种方法的变形:print ,失败-_-|| #c = '内存占用率:' + str(memory) + '\n' + 'CPU占用率:' + str(cpu) #print("\r",'CPU占用率:' + str(cpu),end="",flush=True) # 第二种方法:ANSI.SYS, 测试结果,在 Linux 下成功,Windows下失败 print('内存占用率:' + str(memory) + '\n' + 'CPU占用率:' + str(cpu)) time.sleep(2) print('\x1b[2J') # 第三种方法: 利用sys的标准输出 ,失败-_-|| # print('内存占用率:' + str(memory) + '\n' + 'CPU占用率:' + str(cpu)) # sys.stdout.flush() # time.sleep(2)
运行结果:
虽然失败了,好几次,但是在查阅资料中,还是学到了其他相关的知识,开心。
ANSI.SYS 是一个DOS的驱动 ANSI不仅仅能控制终端的光标(而且ANSI本身也可以指代其他的许多东西 在这里特指'ANSI转义码')
(举个栗子 各种宽字符的cp叫'ANSI字符集'也是ANSI(美国国家标准协会)的标准之一)
ANSI的最新标准是ISO/IEC 6429既然是转义符 那么用起来就很方便了 只要像'\n \t \r \b'之类的转义符那样插在文本里print()或者dump()到屏幕上就行
具体方法如下:ANSI序列以 'ESC字符'+'[' 起始(在纯DOS下双击'ESC'键可获得'ESC字符'*1) 在Python中'ESC字符'可以用'\x1b'来表示 在这之后接具体的控制码即可
\x1b[nA 光标上移 \x1b[nB 光标下移 \x1b[nC 光标右移 \x1b[nD 光标左移 (n 为行数/字符数) \x1b[2J 清屏(把2换成其他数字会有不同的清屏效果) \x1b[x;yH 调整屏幕坐标(x,y的单位是字符) \x1b?25l 隐藏光标 \x1b?25h 显示光标
注1: 这些转义符统统大小写敏感,完整的列表或者高级的使用方法可以去看wiki(用的好的话甚至可以做到按rgb调整颜色)
注2: 所有的指令的生效区间都是字符级的,也就是说甚至可以做到每个字符用不同的颜色和特效(在那个'黑框框'里!!!)
这个方法有个很神奇的操作
print('\x1b[%dA' % (n)) print('\x1b[%d%s' % (n,ope))
缺点是不同的终端的支持的程度不同
查看更多关于实时监控CUP和内存的使用率(二)的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did164132