python基础之使用第三方模块

时间:2019-09-16
本文章向大家介绍python基础之使用第三方模块,主要包括python基础之使用第三方模块使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

除了内建的模块外,Python还有大量的第三方模块。

基本上,所有的第三方模块都会在PyPI - the Python Package Index上注册,只要找到对应的模块名字,即可用pip安装。

此外,安装Anaconda模块后,数十个常用的第三方模块就已经就绪,不用pip手动安装。

一、psutil

  psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。

  psutil是一个跨平台库能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、等。

1、安装

(venv) C:\Users\renyz02\Desktop\py_test1>pip install psutil
Collecting psutil
  Downloading https://files.pythonhosted.org/packages/7c/58/f5d68ddca37480d8557b8566a20bf6108d7e1c6c9b9208ee0786e0cd012b/psutil-5.6.
3-cp37-cp37m-win_amd64.whl (234kB)
    100% |████████████████████████████████| 235kB 85kB/s
Installing collected packages: psutil
Successfully installed psutil-5.6.3

2、常用命令

#内存使用情况
# mem = psutil.virtual_memory()
# print(mem)

#cpu使用率
# cpu = psutil.cpu_percent(1)
# print(cpu)

#硬盘使用情况
# disk = psutil.disk_usage('d:')
# print(disk[1])

#1、查看cpu所有信息
print(psutil.cpu_times())

#2、显示cpu所有逻辑信息
print(psutil.cpu_times(percpu=True))

#3、查看用户的cpu时间比
print(psutil.cpu_times().user)

#4、查看cpu逻辑个数
print(psutil.cpu_count())

#查5、看系统内存
mem = psutil.virtual_memory()
print(mem)
#5.1 系统已经使用内存
print(mem.used)
#5.2 系统空闲内存
print(mem.free)
# 5.3系统总计内存
print(mem.total)
#5.4 获取swap内存信息
print(psutil.swap_memory())

3、例子:

(1)获取CPU信息

import psutil   #导入psutil模块     
print(psutil.cpu_times())    #统计CPU的用户/系统/空闲时间
print(psutil.cpu_count())   #CPU逻辑数量 
print(psutil.cpu_count(logical=False))    #CPU物理核心
#实现类似top命令的CPU使用率,每秒刷新一次,累计10次:
for i in range(10):
    print(psutil.cpu_percent(interval=1,percpu=True))
-----------------------------------------------------------------------------------
scputimes(user=737.03125, system=514.390625, idle=17152.640625, interrupt=12.0625, dpc=55.984375)
2
2
[10.8, 13.6]
[7.8, 9.2]
[18.8, 19.7]
[7.7, 13.4]
[4.6, 7.5]
[26.6, 18.5]
[1.6, 0.0]
[0.0, 3.1]
[1.5, 1.5]
[10.8, 9.1]

(2)获取内存信息

import psutil
print(psutil.virtual_memory())  #物理内存
print(psutil.swap_memory())  #交换内存
---------------------------------------------------
svmem(total=2146287616, available=560144384, percent=73.9, used=1586143232, free=560144384)
sswap(total=3287138304, used=1749319680, free=1537818624, percent=53.2, sin=0, sout=0)
返回的是字节为单位的整数

(3)获取磁盘信息

import psutil
print(psutil.disk_partitions()) #磁盘分区信息
print(psutil.disk_usage("/"))   #磁盘使用情况
print(psutil.disk_io_counters())    #磁盘IO
----------------------------------------------------------------
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='UDF', opts='ro,cdrom')]
sdiskusage(total=42356174848, used=17351532544, free=25004642304, percent=41.0)
sdiskio(read_count=145858, write_count=32079, read_bytes=3212907008, write_bytes=1443702784, read_time=2166, write_time=1402)

(4)获取网络信息

import psutil
print(psutil.net_io_counters()) #获取网络读写字节/包的个数
----------------------------------
snetio(bytes_sent=985568, bytes_recv=21143273, packets_sent=10516, packets_recv=18128, errin=0, errout=0, dropin=0, dropout=0)
-------------------------------------------------------------------------------
print(psutil.net_connections()) #获取当前网络的连接信息
-------------------------------------------------------------------------------
print(psutil.net_if_addrs())    #获取网络接口信息
----------------------------------
{'Ethernet0': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='00-0C-29-E6-FD-15', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.11.132', netmask='255.255.255.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::7555:6b7:e149:498d', netmask=None, broadcast=None, ptp=None)], 'isatap.localdomain': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='00-00-00-00-00-00-00-E0', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::5efe:192.168.11.132', netmask=None, broadcast=None, ptp=None)], '本地连接* 3': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='00-00-00-00-00-00-00-E0', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='2001:0:34f1:8072:2c79:b29:3f57:f47b', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::2c79:b29:3f57:f47b', netmask=None, broadcast=None, ptp=None)], 'Loopback Pseudo-Interface 1': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='::1', netmask=None, broadcast=None, ptp=None)]}
-------------------------------------------------------------------------------
print(psutil.net_if_stats())    #获取网络接口状态
---------------------------------
{'Ethernet0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=1000, mtu=1500), 'Loopback Pseudo-Interface 1': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=1073, mtu=1500), 'isatap.localdomain': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1280), '本地连接* 3': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1472)}

(5)获取进程信息

>>> psutil.pids() # 所有进程ID
[3865, 3864, 3863, 3856, 3855, 3853, 3776, ..., 45, 44, 1, 0]
>>> p = psutil.Process(3776) # 获取指定进程ID=3776,其实就是当前Python交互环境
>>> p.name() # 进程名称
'python3.6'
>>> p.exe() # 进程exe路径
'/Users/michael/anaconda3/bin/python3.6'
>>> p.cwd() # 进程工作目录
'/Users/michael'
>>> p.cmdline() # 进程启动的命令行
['python3']
>>> p.ppid() # 父进程ID
3765
>>> p.parent() # 父进程
<psutil.Process(pid=3765, name='bash') at 4503144040>
>>> p.children() # 子进程列表
[]
>>> p.status() # 进程状态
'running'
>>> p.username() # 进程用户名
'michael'
>>> p.create_time() # 进程创建时间
1511052731.120333
>>> p.terminal() # 进程终端
'/dev/ttys002'
>>> p.cpu_times() # 进程使用的CPU时间
pcputimes(user=0.081150144, system=0.053269812, children_user=0.0, children_system=0.0)
>>> p.memory_info() # 进程使用的内存
pmem(rss=8310784, vms=2481725440, pfaults=3207, pageins=18)
>>> p.open_files() # 进程打开的文件
[]
>>> p.connections() # 进程相关网络连接
[]
>>> p.num_threads() # 进程的线程数量
1
>>> p.threads() # 所有线程信息
[pthread(id=1, user_time=0.090318, system_time=0.062736)]
>>> p.environ() # 进程环境变量
{'SHELL': '/bin/bash', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...', 'PWD': '/Users/michael', 'LANG': 'zh_CN.UTF-8', ...}
>>> p.terminate() # 结束进程
Terminated: 15 <-- 自己把自己结束了

psutil还提供了一个test()函数,可以模拟出ps命令的效果:

import psutil
print(psutil.test())
--------------------------------------------------------------------
USER         PID  %MEM     VSZ     RSS  NICE STATUS  START   TIME  CMDLINE
SYSTEM         0   0.0    0.0B    4.0K        runni  07:55  22:20  System Idle P
SYSTEM         4   3.6  556.0K   74.3M    32  runni  07:55  00:54  System
SYSTEM       252   0.2    1.2M    4.8M    32  runni  07:56  00:00  C:\Program Fi
SYSTEM       264   0.0  348.0K  908.0K    32  runni  07:56  00:00  \SystemRoot\S
SYSTEM       284   2.0   32.6M   40.4M    32  runni  07:56  00:41  C:\Windows\sy
SYSTEM       388   0.2    1.2M    3.1M    32  runni  07:56  00:00  %SystemRoot%\
LOCAL SER    448   1.0    7.8M   20.5M    32  runni  07:56  00:12  C:\Windows\sy
SYSTEM       456   0.2  944.0K    4.1M   128  runni  07:56  00:00  wininit.exe
SYSTEM       472   0.3    1.4M    6.9M    32  runni  07:56  00:19  %SystemRoot%\

二、smtplib(发送邮件)

使用python发送QQ邮件时,用到了Python的两个包来发送邮件: smtplib 和 email 。

(1)Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”。使用的 MIMEText 对象,为底层的 MIME(Multipurpose Internet MailExtensions,多用途互联网邮件扩展类型)协议传输创建了一封空邮件,最后通过高层的SMTP 协议发送出去。

MIMEText 对象 msg 包括收发邮箱地址、邮件正文和主题,Python 通过它就可以创建一封格式正确的邮件。

(2)smtplib :模块用来设置服务器连接的相关信息。

要想通过QQ邮箱来发送邮件,需要开启QQ邮箱的设置-账户里SMTP服务,接下来会通过发送短信验证来获得授权码,有了授权码后就可以在代码里添加了。

Python对SMTP支持有smtplib和email两个模块:

Email:模块里包含了许多实用的邮件格式设置函数,负责构造邮件,

Smtplib:模块用来设置服务器连接的相关信息,负责发送邮件。

1、开启qq邮箱SMTP服务器

2、Python SMTPf发送邮件

  SMTP(Simple Mail Transfer Protocol)邮件传输通讯协议

  SMTP是互联网上的一种通讯协议,主要功能是用在传送电子邮件,当我们通过电子邮件程序,寄E-mil给另外一个人时,必须通过SMTP通讯协议,将邮件送到对方的邮件服务器上,等到对方上网的时候,就可以收到你所寄的信。

原文地址:https://www.cnblogs.com/renyz/p/11526476.html