美文网首页我爱编程
Day18psutil&图形界面

Day18psutil&图形界面

作者: 林清猫耳 | 来源:发表于2018-04-11 22:02 被阅读25次

    psutil

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

    获取CPU信息

    >>> import psutil
    >>> psutil.cpu_count() # CPU逻辑数量
    8
    >>> psutil.cpu_count(logical=False) # CPU物理核心
    4
    # 4说明是4核超线程, 8则是8核非超线程
    

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

    >>> psutil.cpu_times()
    >>> scputimes(user=229289.53125, system=132089.0, idle=4802985.0, interrupt=5994.125030517578, dpc=5266.125)
    

    获取内存信息

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

    # 返回的是字节为单位的整数
    >>> 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)
    

    获取磁盘信息

    >>> 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的父容器:
    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,并启动消息循环:
    app = Application()
    # 设置窗口标题:
    app.master.title('Hello World')
    # 主消息循环:
    app.mainloop()
    

    输入文本

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

    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回调

    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回调

    相关文章

      网友评论

        本文标题:Day18psutil&图形界面

        本文链接:https://www.haomeiwen.com/subject/uybzhftx.html