前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Day22psutil&图形界面

Day22psutil&图形界面

作者头像
林清猫耳
发布2018-04-26 15:38:57
1.1K0
发布2018-04-26 15:38:57
举报
文章被收录于专栏:我爱编程

psutil

用Python来编写脚本简化日常的运维工作是Python的一个重要用途。 在Python中获取系统信息的一个好办法是使用psutil这个第三方模块。顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。

获取CPU信息

代码语言:javascript
复制
>>> import psutil
>>> psutil.cpu_count() # CPU逻辑数量
8
>>> psutil.cpu_count(logical=False) # CPU物理核心
4
# 4说明是4核超线程, 8则是8核非超线程

统计CPU的用户/系统/空闲时间:

代码语言:javascript
复制
>>> psutil.cpu_times()
>>> scputimes(user=229289.53125, system=132089.0, idle=4802985.0, interrupt=5994.125030517578, dpc=5266.125)
获取内存信息

使用psutil获取物理内存和交换内存信息,分别使用:

代码语言:javascript
复制
# 返回的是字节为单位的整数
>>> psutil.virtual_memory()
svmem(total=8512647168, available=4071849984, percent=52.2, used=4440797184, free=4071849984)
>>> psutil.swap_memory()
sswap(total=9049518080, used=5464526848, free=3584991232, percent=60.4, sin=0, sout=0)
获取磁盘信息
代码语言:javascript
复制
>>> psutil.disk_partitions()  # 磁盘分区信息
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed')]
>>> psutil.disk_usage('/')  # 磁盘使用情况
sdiskusage(total=119070531584, used=73445441536, free=45625090048, percent=61.7)
>>> 45625090048/(2**30)
42.491676330566406  # GB
>>> psutil.disk_io_counters()  # 磁盘IO
sdiskio(read_count=7417512, write_count=5075323, read_bytes=170990955520, write_bytes=143101932032, read_time=9873, write_time=5668)

图形界面

Python支持多种图形界面的第三方库,包括:

  • Tk
  • wxWidgets
  • Qt
  • GTK

Tkinter

我们编写的Python代码会调用内置的Tkinter,Tkinter封装了访问Tk的接口; Tk是一个图形库,支持多个操作系统,使用Tcl语言开发; Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。 所以,我们的代码只需要调用Tkinter提供的接口就可以了。

第一个GUI程序
  • 导入Tkinter包的所有内容,从Frame派生一个Application类,这是所有Widget的父容器:
代码语言:javascript
复制
from tkinter import *
class Application(Frame):
    def __init__(self,master=None):
        Frame.__init__(self,master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.helloLabel = Label(self, text='Hello, World!')
        self.helloLabel.pack()
        self.quitButton = Button(self, text='Quit', command=self.quit)
        self.quitButton.pack()

在GUI中,每个Button、Label、输入框等,都是一个Widget。Frame则是可以容纳其他Widget的Widget,所有的Widget组合起来就是一棵树。 pack()方法把Widget加入到父容器中,并实现布局。pack()是最简单的布局,grid()可以实现更复杂的布局。 在createWidgets()方法中,我们创建一个Label和一个Button,当Button被点击时,触发self.quit()使程序退出。

  • 实例化Application,并启动消息循环:
代码语言:javascript
复制
app = Application()
# 设置窗口标题:
app.master.title('Hello World')
# 主消息循环:
app.mainloop()
输入文本

我们再对这个GUI程序改进一下,加入一个文本框,让用户可以输入文本,然后点按钮后,弹出消息对话框。

代码语言:javascript
复制
from tkinter import *
import tkinter.messagebox as messagebox

class Application(Frame):
    def __init__(self,master=None):
        Frame.__init__(self,master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.nameInput = Entry(self)
        self.nameInput.pack()
        self.quitButton = Button(self, text='Helo', command=self.hello)
        self.quitButton.pack()
    def hello(self):
        name = self.nameInput.get() or 'World!'
        messagebox.showinfo('Message','Hello, %s' % name)
        
app = Application()
# 设置窗口标题:
app.master.title('Hello, World!')
# 主消息循环:
app.mainloop()

当用户点击按钮时,触发hello(),通过self.nameInput.get()获得用户输入的文本后,使用tkMessageBox.showinfo()可以弹出消息对话框。

GUI回调

代码语言:javascript
复制
import tkinter as tk

def callback():
    """
    callback function for button click
    """
    listbox.insert(tk.END,"Hello World!")


if __name__ == "__main__":
    master = tk.Tk()

    button = tk.Button(master,text="OK",command=callback)
    button.pack()

    listbox = tk.Listbox(master)
    listbox.pack()
    tk.mainloop()

GUI回调

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.04.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • psutil
    • 获取CPU信息
      • 获取内存信息
      • 获取磁盘信息
  • 图形界面
    • Tkinter
      • 第一个GUI程序
      • 输入文本
    • GUI回调
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档