本关任务:编写查看 CPU、内存和存储的要求内容的小程序。
为了完成本关任务,你需要掌握:
WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的Windows资源。在联网情况下,在命令提示符下输入pip install wmi
,完成 wmi 模块的安装。
使用python中的wmi模块获取处理器ID,名称,速度以及利用率等信息。 在IDLE中输入:
import wmi
import time
def cpu_use(n):
# ns取一次CPU的使用率
c = wmi.WMI()
while True:
for cpu in c.Win32_Processor():
timestamp = time.strftime('%a, %d %b %Y %H:%M:%S', time.localtime())
print('%s | Utilization: %s: %d %%' % (timestamp, cpu.DeviceID, cpu.LoadPercentage))
time.sleep(n)
# 遍历进程
c = wmi.WMI()
# CPU类型和内存
n = eval(input())
for processor in c.Win32_Processor():
print("Processor ID: %s" % processor.DeviceID) # CPU的编号
print("Process Name: %s" % processor.Name.strip()) # CPU的名称
print("Process number Of Cores: %s" % processor.numberOfCores) # CPU的内核数
print("Process Speed: %s Mbps" % processor.maxClockSpeed) # CPU的速度
cpu_use(n) # 每隔n秒采样一次CPU的速度
运行结果如下图所示。
使用python中的wmi模块获取内存容量、空闲率等信息。 在IDLE中输入:
import wmi
import time
c = wmi.WMI()
for Memory in c.Win32_PhysicalMemory():
x = int(Memory.Capacity) / 1048576
print("Memory Capacity: %.fMB" % (x)) # 计算内存容量
for Memory in c.Win32_ComputerSystem():
x = int(Memory.TotalPhysicalMemory) / (2 ** 20)
print("Memory Capacity in System: %.0fMB" % (x)) # 计算系统内存容量
for Memory in c.Win32_OperatingSystem():
x = int(Memory.FreePhysicalMemory) / (2 ** 10)
print("Memory Idle Capacity: %.0fMB" % (x)) # 计算操作系统内存空闲容量
for Memory in c.Win32_PageFileUsage():
x = int(Memory.AllocatedBaseSize)
y = int(Memory.CurrentUsage)
print("PageFile in Memory Capacity: %dMB" % (x)) # 可用内存容量
print("used PageFile in Memory Capacity: %dMB" % (y)) # 已用内存容量
print("Free PageFile in Memory Capacity: %dMB" % (x - y)) # 空闲内存容量
运行程序,获取当前计算机内存使用情况,如下图所示。
使用python中的wmi模块获取计算机存储系统,特别是辅存的基本信息。 Python查看计算机系统中cache,内存和辅存的容量,查看存储分级特点。 在IDLE中输入:
import wmi
import time
c = wmi.WMI()
sum = 0
for cpu_m in c.Win32_Processor():
y = int(cpu_m.L2CacheSize)
z = int(cpu_m.L3CacheSize)
print("L2 Cache in CPU : %.fKB" % (y)) # 2级Cache容量
print("L3 Cache in CPU : %.fKB" % (z)) # 3级Cache容量
for Memory in c.Win32_ComputerSystem():
x = int(Memory.TotalPhysicalMemory) / (2 ** 20)
print("Memory Capacity in System: %.0fMB" % (x)) # 计算系统内存容量
for disk in c.Win32_LogicalDisk():
x = int(disk.Size)
sum = sum + x
print("Hard disk capacity %.0f GB" % (sum / 2 ** 30)) # 计算硬盘容量
运行程序,获取当前计算机存储系统情况,如下图所示。
Python查看计算机系统磁盘的容量,名称等物理信息,查看使用情况。 在IDLE中输入:
import os, sys
import time
import wmi
def get_disk_info():
tmplist = []
c = wmi.WMI()
for physical_disk in c.Win32_DiskDrive():
tmpdict = {}
tmpdict["物理名称"] = physical_disk.Caption # 磁盘的物理名称
tmpdict["容量"] = int(int(physical_disk.Size) / 2 ** 30) # 磁盘物理容量
tmplist.append(tmpdict)
return tmplist
def get_fs_info():
tmplist = []
c = wmi.WMI()
for physical_disk in c.Win32_DiskDrive():
for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"):
for logical_disk in partition.associators("Win32_LogicalDiskToPartition"):
tmpdict = {}
tmpdict["盘符"] = logical_disk.Caption # 磁盘盘符名称
tmpdict["总容量"] = int(logical_disk.Size) / 2 ** 30
tmpdict["已用空间"] = (int(logical_disk.Size) - int(logical_disk.FreeSpace)) / 2 ** 30 # 磁盘已用容量
tmpdict["空闲空间"] = int(logical_disk.FreeSpace) / 1024 / 1024 / 1024
tmplist.append(tmpdict)
return tmplist
if __name__ == "__main__":
disk = get_disk_info()
print(disk)
print('--------------------------------------')
fs = get_fs_info()
print(fs)
运行程序,获取当前计算机磁盘的基本信息,如下图所示。
思考:
1、计算机存储系统有什么特点和规律?
2、如何查询计算机网卡、主板等硬件设备信息?
psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。在联网情况下,在命令提示符下输入pip install psutil,完成psutil模块的安装。
使用python中的psutil模块获取处理器的名称、个数等信息。 在IDLE中输入:
import psutil
print("--------------cpu---------------")
cpuinfo = psutil.cpu_times();
print('cpu 完整的基本信息:', cpuinfo)
# user () 从系统启动开始累计到当前时刻,用户态的CPU时间,不包含 nice值为负进程。
# nice () 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
# system () 从系统启动开始累计到当前时刻,核心时间
# idle () 从系统启动开始累计到当前时刻,除IO等待时间以外其它等待时间
# iowait () 从系统启动开始累计到当前时刻,IO等待时间
# irq () 从系统启动开始累计到当前时刻,硬中断时间
# softirq () 从系统启动开始累计到当前时刻,软中断时间
print('cpu单项数据信息,用户user的cpu时间比', cpuinfo.user)
print('获取cpu的逻辑个数:', psutil.cpu_count())
print('获取cpu的物理个数:', psutil.cpu_count(logical=False))
运行结果如下图所示。
使用python中的psutil模块获取内存容量、空闲量等信息。 在IDLE中输入:
import psutil
print('--------------内存----------------')
mem = psutil.virtual_memory();
print('获取内存完整信息:', mem)
print('获取内存总数:', mem.total / (1024 * 1024 * 1024), 'G')
print('获取内存空闲总数:', mem.free / (1024 * 1024 * 1024), 'G')
print('获取swap分区的内存信息:', psutil.swap_memory())
运行程序,获取当前计算机内存使用情况,如下图所示。
使用python中的psutil模块获取计算机辅存的基本信息。 在IDLE中输入:
import psutil
print('-----------磁盘信息----------------')
print('获取磁盘完整信息:', psutil.disk_partitions())
print('获取分区的使用情况:', psutil.disk_usage('/'))
print('获取硬盘总的IO个数、读写信息:', psutil.disk_io_counters())
print('获取单个分区IO个数:', psutil.disk_io_counters(perdisk=True))
import psutil
运行程序,获取当前计算机辅存系统情况,如下图所示。
根据提示,在右侧编辑器补充代码,获取并输出 CPU、内存和存储的要求内容。
平台会对你编写的代码进行测试。
开始你的任务吧,祝你成功!
import psutil
########## Begin ##########
print("--------------cpu---------------")
cpuinfo = psutil.cpu_times()
print('获取cpu的逻辑个数:', psutil.cpu_count())
print('获取cpu的物理个数:', psutil.cpu_count(logical=False))
print('--------------内存----------------')
mem = psutil.virtual_memory()
print('获取内存总数:', mem.total / (1024 * 1024 * 1024), 'G')
print('-----------磁盘信息----------------')
print('获取磁盘完整信息:', psutil.disk_partitions())
########## End ##########
"""
这关没什么好说的,阅读理解,想要本地运行的话需要您自己在pycharm上安装数据库
具体的就不多赘述了
"""
本关任务:利用 python 编写查看进程信息的小程序。
为了完成本关任务,你需要掌握:
进程是程序的运行过程,是系统进行资源分配和调度的一个独立单位。为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。
进程控制块是用来描述进程的当前状态,本身特性的数据结构,是进程中组成的最关键部分,其中含有描述进程信息和控制信息,是进程的集中特性反映,是操作系统对进程具体进行识别和控制的依据。
PCB一般包括:
打开一个“记事本”程序,利用python 获取该进程的id,名称,状态等基本信息。 在IDLE中输入:
import psutil
import datetime
plist = psutil.pids() # plist为所有进程PID列表
for p in plist:
ps = psutil.Process(p) # 根据进程PID查询详细信息
if ps.name() == "notepad.exe":
print("-------------进程------------")
print("进程ID:", p)
print("进程名称:", ps.name())
print("进程执行exe绝对路径:", ps.exe())
print("进程工作目录:", ps.cwd())
print("进程状态:", ps.status())
print("进程优先级:", ps.nice())
print("进程内存利用率:", str(ps.memory_percent()))
print("进程内存rss、vms信息:", str(ps.memory_info()))
print("进程开启的线程数:", str(ps.num_threads()))
dt = datetime.datetime.fromtimestamp(ps.create_time()).strftime("%H:%M:%S")
print("进程开启时间:", dt)
break
运行程序,获取当前“notepad”进程的基本情况,如下图所示。
思考:
1、如何查询python编译程序的进程信息?
2、一个程序可以开启几个进程,一个进程可以开启几个线程?
根据提示,在右侧编辑器补充代码,按要求获取并输出本机上的进程信息。
平台会对你编写的代码进行测试:
测试输入:
python
;
预期输出:
-------------进程------------
进程名称: python
进程执行程序绝对路径: /usr/local/bin/python3.6
进程工作目录: /data/workspace/myshixun
进程状态: running
进程优先级: 0
开始你的任务吧,祝你成功!
import psutil
import datetime
########## Begin ##########
plist = psutil.pids() # plist为所有进程PID列表
exe = input()
for p in plist:
ps = psutil.Process(p) # 根据进程PID查询详细信息
if ps.name() == exe:
print("-------------进程------------")
print("进程名称:", ps.name())
print("进程执行程序绝对路径:", ps.exe())
print("进程工作目录:", ps.cwd())
print("进程状态:", ps.status())
print("进程优先级:", ps.nice())
break
########## End ##########
"""
还是阅读理解,同样,想要本地运行的佬需要导入数据库
"""
本关任务:编写使用文件以及目录操作结合文本的小程序。
为了完成本关任务,你需要掌握:
在Windows系统中,对文件和目录的操作,通过文件名(绝对地址或相对地址)以及文件或目录的资源句柄来操作。其中句柄实际上是一个数据,是一个Long(长整型)的数据,是Windows用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。
在C盘或其他工作盘的根目录下新建一个名为python的txt文档,并其中输入古诗《登鹳雀楼》。 在IDLE中输入:
import os
filename = "E:\python.txt" # 待操作文件绝对路径
# r:以读方式打开
# w:以写方式打开
# a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
# r+:以读写模式打开,w+:以读写模式打开 (参见 w )
# a+:以读写模式打开 ,rb:以二进制读模式打开
# wb:以二进制写模式打开 (参见 w )
# ab:以二进制追加模式打开 (参见 a )
# rb+:以二进制读写模式打开 (参见 r+ )
# wb+:以二进制读写模式打开 (参见 w+ )
# ab+:以二进制读写模式打开 (参见 a+ )
f = open(filename, 'w') # 按写方式打开文件,文件不存在则新建,f为操作句柄
str = "白日依山尽,黄河入海流。\n欲穷千里目,更上一层楼。\n"
f.seek(0, 2) # 从文件末尾处写,(0,0)为文件开头处,(0,1)为当前位置
line = f.write(str) # 写入文件
f.close() # 关闭句柄
f = open(filename, 'r') # 按读方式打开文件
print(f.read()) # 读取文件输出
运行程序,得到文件操作的读取信息,如下图所示。
思考:
1、将上述程序的
f = open(filename, 'w')
语句的操作模式更改为r
和a
,结果如何?2、修改上述程序,将文件路径和文件写入内容都由输入input()确定?
遍历在E盘或其他工作盘的根目录下的所有文件或所有的文件夹及其子文件夹的所有文件。 在IDLE中输入:
import os
def fileInFolder(filepath):
pathDir = os.listdir(filepath) # 获取filepath文件夹下的所有的文件
files = []
for allDir in pathDir:
child = os.path.join('%s\\%s' % (filepath, allDir)) # 拼接 filepath, allDir 的文件路径
files.append(child)
return files
def getfilelist(filepath):
filelist = os.listdir(filepath) # 获取filepath文件夹下的所有的文件
files = []
for i in range(len(filelist)):
child = os.path.join('%s\\%s' % (filepath, filelist[i]))
if os.path.isdir(child):
files.extend(getfilelist(child))
else:
files.append(child)
return files
filepath = "E:/test1/"
print("————————遍历文件夹下所有文件————————")
print(fileInFolder(filepath))
print("—————遍历文件夹及其子文件夹的所有文件——————")
print(getfilelist(filepath))
运行程序,得到指定路径目录下,如E:\\test1
下的遍历文件信息,如下图所示。
思考:上述两种遍历有什么区别?
根据提示,在右侧编辑器补充代码,将 src/step3/text/
文件夹下的所有文件(所有文件名均为:0.txt
)内容结合在一起并输出。
文件结构如下:
平台会对你编写的代码进行测试。
开始你的任务吧,祝你成功!
import os
path = 'src/step3/text'
# 输出字符串
str_text = ""
# 获取 path 下的所有文件夹
os_list = os.listdir(path)
os_list.sort(key = lambda x: int(x)) # 将所有的文件按文件名的数字大小进行排序
# 遍历所有文件夹
for i in os_list:
# 拼接文件名并读取
# 可以使用下面的语句实现相同的效果
'''with open(os.path.join(path, i + '/0.txt'), encoding='utf-8') as f:'''
f = open(os.path.join(path, i + '/0.txt'), encoding='utf-8') # 打开所有的“0.txt”文件,并以utf-8编码读取
# 结合所有文件夹中的内容
str_text += f.read() # 读取文件内容并添加到 str_text 中
f.close()
print(str_text)