python模块

 


模块

1. random

  • random.randint 指定一个范围随机返回这个范围内的数
  • random.choice 随机返回列表或元组中的一个值

randint

from random import randint

print(randint(1,6))

choice

"""使用random模块中的choice方法制作一个彩票分析小程序,看看中彩票有多难!"""

from random import choice

my_ticket = (2,'b','b','e')
caipiao = [1,2,3,4,5,6,7,8,9,'a','b','c','d','e']

a = 0
while True:
    number = []
    for i in range(4):
        number.append(random.choice(caipiao))
    tuple1 = tuple(number)
    print(f"您抽中的号码为:{tuple1}")
    a += 1
    if tuple1 == my_ticket:
        print(f"恭喜您中奖啦!!! 本次中奖号码为: {my_ticket},请核实您抽中的号码")
        print(f"a = {a}")
        break

2. os

1.文件和目录操作

1)os.listdir(path) 列出指定目录下的所有文件和子目录。

import os
files_and_dirs = os.listdir("/home/user")
print(files_and_dirs)

2)os.mkdir(path,mode=0o777) 创建一个目录

os.mkdir("/home/user/newdir", mode=0o755)

3)os.makedirs(path,mode=0o777,exist_ok=False) 递归创建多级目录。

os.makedirs("/home/user/newdir/subdir", exist_ok=True)

4)os.rmdir(path) 删除一个空目录

os.rmdir("/home/user/newdir")

5)os.removedirs(path) 递归删除空目录

os.removedirs("/home/user/newdir/subdir")

6)os.rename(src,dst) 重命名文件或目录

os.rename("/home/user/oldname.txt", "/home/user/newname.txt")

7)os.remove(path) 删除文件

os.remove("/home/user/file.txt")

6)os.chmod(path,mode) 修改文件或目录的权限

os.chmod("/home/user/file.txt", 0o755)

7)os.chown(path,uid,gid) 修改文件或目录的所有者

os.chown("/home/user/file.txt", 1000, 1000)

8)os.symlink(src,dst) 创建符号链接

os.symlink("/home/user/file.txt", "/home/user/link.txt")

9)os.readlink(path) 获取符号链接的目标路径

target = os.readlink("/home/user/link.txt")
print(target)

2.文件属性和状态

1)os.path.exists(path) 检查路径是否存在

if os.path.exists("/home/user/file.txt"):
    print("File exists")

2)os.path.isfile(path) 检查路径是否是普通文件

if os.path.isfile("/home/user/file.txt"):
    print("It's a file")

3)os.path.isdir(path) 检查路径目录是否存在

if os.path.isdir("/home/user"):
    print("It's a directory")

4)os.path.getsize(path) 获取文件大小(字节)

size = os.path.getsize("/home/user/file.txt")
print(f"File size: {size} bytes")

5)os.path.getmtime(path) 获取文件最后修改的时间(时间戳)

import time
mtime = os.path.getmtime("/home/user/file.txt")
print(time.ctime(mtime))

3.环境变量和路径的操作

1)os.environ 获取环境变量。

home_dir = os.environ.get("HOME")
print(home_dir)

2)os.path.join(path,*paths) 安全的拼接路径

full_path = os.path.join("/home", "user", "file.txt")
print(full_path)

3)os.path.abspath(path) 获取路径的绝对路径

abs_path = os.path.abspath("file.txt")
print(abs_path)

4)os.path.basename(path) 获取路径中的文件名部分

filename = os.path.basename("/home/user/file.txt")
print(filename)

5)os.path.dirname(path) 获取路径中的目录部分

dirname = os.path.dirname("/home/user/file.txt")
print(dirname)

4.进程和系统操作

1)os.system(command) 执行系统命令

os.system("ls -l")

2)os.fork() 创建子进程

pid = os.fork()
if pid == 0:
    print("Child process")
else:
    print("Parent process")

3)os.kill(pid,sig) 发送信号到进程

os.kill(pid, signal.SIGTERM)

4)os.wait() 等待子进程结束

os.fork()
os.wait()

3. sys

1.sys.argv 获取命令行参数

import sys
print("Script name:", sys.argv[0])  # 脚本名称
print("Arguments:", sys.argv[1:])   # 其他参数

	- 案例:判断文件是否存在
#!/usr/bin/python3
#_*_coding:utf-8_*_

import os
import sys


def main():
    # sys.argv.append("")     #如果用户未传递参数会触发异常,所以先将参数设置为空
    # filename = sys.argv[1]
    for filename in sys.argv[1:]:
        if not os.path.isfile(filename):
            raise SystemExit(filename + ' does not exists ')
        elif not os.access(filename,os.R_OK):
            raise SystemExit(filename + ' is not accessible ')
        else:
            print(filename + ' is accessible ')


if __name__ == '__main__':
    main()

2.sys.path 获取python模块搜索路径

print("Module search path:", sys.path)

3.sys.modules 获取已加载模块列表

print("Loaded modules:", list(sys.modules.keys()))

4.sys.exit([status]) 退出脚本

if error:
    print("Error occurred")
    sys.exit(1)  # 非零状态码表示失败

5.sys.stdin 标准输入流

user_input = sys.stdin.readline().strip()	#交互式输入内容
print("You entered:", user_input)

6.sys.stderr 标准错误流

sys.stderr.write("Error occurred!\n")

7.sys.platform 获取当前运行的平台

print("Platform:", sys.platform)
if sys.platform.startswith("linux"):
    print("Running on Linux")

8.sys.exc_info() 获取当前异常信息(返回一个包含异常类型、异常实例和回溯对象的元组。)

try:
    1 / 0
except:
    exc_type, exc_value, exc_traceback = sys.exc_info()
    print("Exception type:", exc_type)
    print("Exception value:", exc_value)

9.sys.signals 信号处理

import signal
import sys

def signal_handler(sig, frame):
    print("Signal received:", sig)
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)
print("Press Ctrl+C to exit")
signal.pause()

4. time

1.获取当前时间

time.time() 和 time.localtime()

import time

# 获取当前时间的时间戳(自1970年1月1日以来的秒数)
timestamp = time.time()
print("Current timestamp:", timestamp)

# 获取当前时间的结构化表示(年,月,日,小时,分钟,秒)
local_time = time.localtime()
print("Local time:", local_time)

2.时间延迟

time.sleep()

# 暂停执行指定秒数
time.sleep(5)
print("Waited 5 seconds")

3.格式化时间

# 将时间戳格式化为可读字符串
formatted_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print("Formatted time:", formatted_time)

5. re

正则表达式模式

模式 描述
^ 匹配字符串的开头
$ 匹配字符串的末尾。
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0个或多个的表达式。
re+ 匹配1个或多个的表达式。
re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re 精确匹配 n 个前面表达式。例如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。
re 匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。
re 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a| b 匹配a或b
(re) 对正则表达式分组并记住匹配的文本
(?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re) 类似 (...), 但是不表示一个组
(?imx: re) 在括号中使用i, m, 或 x 可选标志
(?-imx: re) 在括号中不使用i, m, 或 x 可选标志
(?#...) 注释.
(?= re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re) 匹配的独立模式,省去回溯。
\w 匹配字母数字及下划线
\W 匹配非字母数字及下划线
\s 匹配任意空白字符,等价于 [ \t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意数字,等价于 [0-9].
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z 匹配字符串结束
\G 匹配最后匹配完成的位置。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等. 匹配一个换行符。匹配一个制表符。等
\1...\9 匹配第n个分组的内容。
\10 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

7. subprocess

参数名 类型 描述 默认值
args list 或 str 命令及其参数。如果是列表,则直接传递给程序;如果是字符串,则使用 shell 解释器。 必需
shell bool 是否在 shell 环境中执行命令。 False
stdout file descriptor, subprocess.PIPE, int, None 标准输出的处理方式。 None(输出到控制台)
stderr file descriptor, subprocess.PIPE, int, None 标准错误输出的处理方式。 None(输出到控制台)
stdin file descriptor, subprocess.PIPE, int, None 标准输入的处理方式。 None(不提供输入)
universal_newlines bool 如果为 True,则输入和输出被处理为字符串;如果为 False,则被处理为字节。 False
capture_output bool 如果为 True,则捕获标准输出和标准错误输出。 False
text bool 别名 universal_newlines,在 Python 3.7 中引入,用于简化文本模式的使用。 False
cwd str, None 指定工作目录。 当前工作目录
env dict, None 指定环境变量。 当前环境变量
preexec_fn callable, None 在子进程执行前调用的函数。 None
close_fds bool 是否关闭子进程的文件描述符。 True
startupinfo subprocess.STARTUPINFO, None Windows 平台上的启动信息。 None
creationflags int, None Windows 平台上的创建标志。 0
check bool 如果为 True,则命令执行失败时抛出 subprocess.CalledProcessError 异常。 False
encoding str, None 指定输入和输出的编码。 None(使用系统默认编码)
errors str 指定编码错误的处理方式(strict, ignore, replace)。 未指定

以下是一些使用 subprocess.run() 的示例:

示例描述 代码示例
执行命令并捕获输出 subprocess.run(['ls', '-l'], capture_output=True, text=True)
执行命令并检查结果 subprocess.run(['ls', '/non_existent_directory'], capture_output=True, text=True, check=True)
执行命令并指定工作目录 subprocess.run(['ls', '-l'], cwd='/home/user', text=True)
执行命令并指定环境变量 subprocess.run(['python', 'script.py'], env={'PATH': '/usr/bin'})
执行命令并处理编码 subprocess.run(['command'], encoding='utf-8')
  • Popen.wait()和Popen.communicate()方法
    • Popen对象创建后主程序并不会自动等待子进程完成。所以我们必须执行wait或communicate方法,父进程才会等待
    • wait和communicate方法都是用来等待外部程序执行结束并获取返回值,这也意味着调用它们就开始执行外部命令了。
    • 如果stdout或stderr参数都是PIPE,并且程序输出超过操作系统管道长度时,使用wait会导致死锁,因此官方建议使用communicate

8. fileinput替代sys.stdin读取输入流

9. psutil

  • psutil默认以字节显示(整型int),直接除以3个1024可转换为GB

9.1 获取系统性能信息

cpu

  • cpu完整信息解释说明:
字段名称 含义 说明
user 用户态 CPU 时间 CPU 在用户态下运行普通用户程序所占用的时间。
nice 低优先级用户态 CPU 时间 CPU 在用户态下运行低优先级进程(通过 nice 命令调整优先级的进程)所占用的时间。
system 内核态 CPU 时间 CPU 在内核态下运行内核代码(如设备驱动程序、文件系统操作等)所占用的时间。
idle 空闲 CPU 时间 CPU 处于空闲状态的时间,即 CPU 没有执行任何任务的时间。
iowait I/O 等待时间 CPU 等待 I/O 操作完成的时间(如磁盘读写操作)。
irq 硬件中断时间 CPU 处理硬件中断(如键盘、鼠标、网卡等外部设备触发的中断)所占用的时间。
softirq 软件中断时间 CPU 处理软件中断(如网络协议栈处理、定时器中断等)所占用的时间。
steal 被虚拟机偷走的时间 在虚拟化环境中,CPU 时间被宿主机或其他虚拟机占用的时间。在物理机上通常为 0.0
guest 运行虚拟机的时间 CPU 在运行虚拟机(如 KVM、Xen 等)时所占用的时间。在物理机上通常为 0.0
guest_nice 运行低优先级虚拟机的时间 CPU 在运行低优先级虚拟机时所占用的时间。在物理机上通常为 0.0
#CPU信息
cpu = psutil.cpu_times()
print(cpu)
print(f"user:{cpu.user},system:{cpu.system},idle:{cpu.idle}")

内存

#内存信息
mem = psutil.virtual_memory()   #使用virtual_memory()获取内存的完整信息
print(mem)
print(f"total:{mem.total},used:{mem.used}")
mem_swap = psutil.swap_memory() #使用swap_memory()获取系统swap交换分区完整信息
print(f"swap:{mem_swap}")

磁盘

  • 磁盘信息重点关注磁盘利用率和io读写数
#磁盘信息(重点关注磁盘利用率和io读写数)
disk = psutil.disk_partitions() #disk_partitions()获取磁盘的完整信息
print(disk)
disk_usage = psutil.disk_usage('/') #disk_usage('/')指定分区使用情况利用率
print(disk_usage)
disk_io = psutil.disk_io_counters() #disk_io_counters()获取磁盘的总io数
print(disk_io)
disk_io_one = psutil.disk_io_counters(perdisk=True) #disk_io_counters(perdisk=True)获取单个磁盘的io数
print(disk_io_one)

网络

  • 网络信息重点关注: bytes_sent=579758412(发送字节数),bytes_recv=1744587596(接收字节数), packets_sent=3704487(发送数据包数),packets_recv=5320867(接收数据包数)
#网络信息
net = psutil.net_io_counters(pernic=True)   #net_io_counters()输出总的网络io信息,pernic=True输出每个网络接口的io信息
print(net)

其他信息

  • 当前系统登录的用户信息
In [39]: psutil.users()
Out[39]: [suser(name='root', terminal='pts/2', host='111.26.86.20', started=1738993613.0, pid=191667)]
  • 当前系统开机时间
In [40]: import psutil,datetime

In [41]: psutil.boot_time()	#返回时间戳
Out[41]: 1733188166.0

In [42]: datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
Out[42]: '2024-12-03 09:09:26'

案例: 给出进程名输出该进程信息

#!/usr/bin/python3
#_*_coding:utf-8_*_

import psutil
import sys


def print_proc_name(proc_names):
	#psutil.pids()默认返回为列表
    pids_list = psutil.pids()
    try:
        for pid in pids_list:
            for proc_name in proc_names:
                p = psutil.Process(pid)
                if p.name() == proc_name:
                    print(p)
    except Exception as e:
        print(str(e))


if __name__ == '__main__':
    print_proc_name(sys.argv[1:])	#获取用户指定的参数

9.2 系统进程管理

In [1]: import psutil

In [3]: psutil.Process(178951)	#实例化一个进程对象,参数为进程pid
Out[3]: psutil.Process(pid=178951, name='nginx', status='sleeping', started='2025-02-05 16:02:15')

In [5]: p.name()	#进程名
Out[5]: 'nginx'

In [6]: p.exe()		#进程bin路径
Out[6]: '/usr/sbin/nginx'

In [7]: p.cwd()		#进程的工作目录
Out[7]: '/'

In [8]: p.status()	#进程状态
Out[8]: 'sleeping'

In [9]: p.create_time()	#进程创建时间
Out[9]: 1738742535.53

In [10]: p.uids()
Out[10]: puids(real=0, effective=0, saved=0)

In [11]: p.gids()
Out[11]: pgids(real=0, effective=0, saved=0)

In [12]: p.cpu_times()	#进程的cpu时间,包括user,system
Out[12]: pcputimes(user=0.0, system=0.0, children_user=0.0, children_system=0.0, iowait=0.0)

In [13]: p.cpu_affinity()	#进程的cpu亲和度
Out[13]: [0, 1]

In [14]: p.memory_percent()	#进程内存利用率
Out[14]: 0.09876393318608247

In [15]: p.memory_info()	#进程内存的rss,vms信息(进程的物理内存和逻辑内存)
Out[15]: pmem(rss=1732608, vms=56537088, shared=20480, text=786432, lib=0, data=1482752, dirty=0)

In [16]: p.io_counters()	#进程的读写情况
Out[16]: pio(read_count=0, write_count=0, read_bytes=0, write_bytes=0, read_chars=0, write_chars=0)

In [17]: p.connections()	#返回打开进程的socket列表
<ipython-input-17-d50301053d22>:1: DeprecationWarning: connections() is deprecated and will be removed; use net_connections() instead
  p.connections()
Out[17]: 
[pconn(fd=6, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='0.0.0.0', port=80), raddr=(), status='LISTEN'),
 pconn(fd=7, family=<AddressFamily.AF_INET6: 10>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='::', port=80), raddr=(), status='LISTEN')]

In [18]: p.num_threads()	#进程打开的线程数
Out[18]: 1
posted @   逃离这世界~  阅读(8)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示

目录导航