collections,os,sys,signal,psutil,shutil

os

    os模块是与操作系统交互的一个接口, 主要是与操作系统相关

文件目录相关

os.makedirs('dir1/dir2')    # 可递归创建多级目录 相当于 mkdir -p
os.mkdir('dir')             # 创建单机目录 相当于 mkdir
os.removedirs('dirname')    # 若目录为空则删除,并递归上一级目录若也为空则删除,以此类推.
os.rmdir('dirname')         # 删除单级空目录,若目录不为空则报错
os.listdir('dirname')       # 列出指定目录下面所有文件及目录,包括隐藏文件夹,并以列表方式打印.
os.remove('filename')       # 删除指定的文件.
os.rename('oldname','newname')  # 重命名文件或者目录.
os.stat('path/filename')        # 获取文件或者目录信息.
os.getcwd()                 # 获取当前工作目录,即shell脚本工作目录.
os.chdir('dirname')         # 改变当前工作目录,相当于 cd

注意:os.stat('path/filename')  获取文件/目录信息 的结构说明

st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

路径相关

os.path.abspath('path')         # 返回 path  规范化绝对路径.
os.path.split('path')           # 将 path 分割分成目录和文件名按照元组返回.
os.path.dirname('path')         # 返回 path 的目录. 相当于 os.path.split(path) 的第一个元素.
os.path.basename('path')        # 返回 path 的最后的文件名.如果 path 以 / 或者 \ 结尾则返回空值.即 os.path.split(path) 的第二个元素.
os.path.exists('path')          # 如果 path 存在则返回 True, 不存在则返回 False.
os.path.isabs('path')           # 如果 path 是绝对路径则返回 True.
os.path.isfile('path')          # 如果 path 是一个存在的文件则返回 True,否则返回 False.
os.path.isdir('path')           # 如果 path 是一个存在的目录,则返回True,否则则返回 False.
os.path.join('path1','path2')   # 将多个路径拼接在一起,返回一个绝对路径.
os.path.getatime('path')        # 返回 path 的最后访问时间.
os.path.getmtime('path')        # 返回 path 的最后修改时间.
os.path.getctime('path')        # 返回 path 的windows环境下是输出文件创建时间;如果是linux环境下ctime代表“状态时间”
os.path.getsize('path')         # 返回 path 的大小.

模块属性

os.sep.join()                   # 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep()                      # 输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
os.pathsep()                    # 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name()                         # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

系统命令相关

os.system("bash command")       # 运行 shell命令 直接显示输出.
os.popen("bash command").read() # 运行 shell 命令,获取执行结果.

sys

sys模块是与python解释器交互的一个接口

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version        获取Python解释程序的版本信息
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

自定义返回状态码

import sys
try:
    sys.exit(1)
except SystemExit as e:
    print(e)

signal

规则信号

信号编号名称默认动作说明
1 SIGHUP 终止 终止控制终端或进程
2 SIGINT 终止 由键盘引起的终端(Ctrl-c)
3 SIGQUIT dump 控制终端发送给进程的信号, 键盘产生的退出(Ctrl-\),
4 GIGILL dusmp 非法指令引起
5 SIGTRAP dump debug中断
6 SIGABRT/SIGIOT dump 异常中止
7 SIGBUS/SIGEMT dump 总线异常/EMT指令
8 SIGFPE dump 浮点运算溢出
9 SIGKILL 终止 强制杀死进程(大招, 进程不可捕获)
10 SIGUSR1 终止 用户信号, 进程可自定义用途
11 SIGSEGV dump 非法内存地址引起
12 SIGUSR2 终止 用户信号, 进程可自定义用途
13 SIGPIPE 终止 向某个没有读取的管道中写入数据
14 SIGALRM 终止 时钟中断(闹钟)
15 SIGTERM 终止 进程终止(进程可捕获)
16 SIGSTKFLT 终止 协处理器栈错误
17 SIGCHLD 忽略 子进程退出或中断
18 SIGCONT 继续 如进程停止状态则开始运行
19 SIGSTOP 停止 停止进程运行
20 SIGSTP 停止 键盘产生的停止
21 SIGTTIN 停止 后台进程请求输入
22 SIGTTOU 停止 后台进程请求输出
23 SIGURG 忽略 socket发送紧急情况
24 SIGXCPU dump CPU时间限制被打破
25 SIGXFSZ dump 文件大小限制被打破
26 SIGVTALRM 终止 虚拟定时时钟
27 SIGPROF 终止 profile timer clock
28 SIGWINCH 忽略 窗口尺寸调整
29 SIGIO/SIGPOLL 终止 I/O可用
30 SIGPWR 终止 电源异常
31 SIGSYS/SYSUNUSED dump 系统调用异常

 

常用信号:

编号信号名称说明
2 SIGINT 当按下键盘(Ctrl-c)组合键时进程就会收到这个信号
15 SIGTERM 当用户输入 kill sigterm pid. 对应的进程就会收到这个信号. 这个信号进程是可以捕获并指定函数处理, 例如做一下程序清理等工作. 甚至忽视这个信号
9 SIGKILL 强制杀死进程, 这个信号进程无法忽视, 直接在系统层面把进程杀掉. 所以在Python中他的不能监听的
14 SIGALRM 闹钟信号

去码

psutil

psutil 模块是第三方模块,主要调取主机 CPU, 内存, 网络,磁盘等状态信息.
可跨平台运.支持Linux/UNIX/OSX/Windows等

cpu相关

psutil.cpu_times()						# 统计CPU的用户/系统/空闲时间:
psutil._last_cpu_times          		
psutil.cpu_times().user

psutil.cpu_count()               		# 获取逻辑cpu个数
psutil.cpu_count(logical=False)  		# 获取物理cpu个数

psutil.cpu_percent(interval=10)  		# 查看cpu利用率
psutil.cpu_percent(percpu=True) 
psutil.cpu_percent(interval=None, percpu=False)


psutil.cpu_stats())						# CPU信息
psutil.cpu_freq()						# 返回cpu频率信息

cpu.times解释

CPU运行状态 解释
user         进程执行用户态代码耗费的CPU时间。
nice         在优先级高的用户级别执行时CPU占用率的百分比。
system         内核执行系统调用所使用的CPU时间。
idle         CPU空闲并且系统没有未完成的磁盘I / O请求的时间百分比。
iowait         CPU等待I/O输入输出的时间
irq         CPU用于维护硬件中断所花费的时间百分比。
softirq     CPU用于服务软件中断所花费的时间百分比。
steal         在虚拟化环境中运行的其他操作系统所花费的时间
guest         CPU用于运行虚拟处理器的时间百分比。
dpc         服务延迟过程调用所花费的时间
interrupt     服务硬件中断所花费的时间
CPU运行状态 解释

cpu.stats解释

ctx_switches         启动后的上下文切换次数
interrupts             自引导以来的中断数
soft_interrupts     自引导以来的软件中断次数
syscalls             自引导以来的系统调用次数
stats解释

内存相关

psutil.virtual_memory()								# 获取物理内存信息
psutil.virtual_memory().total / 1024) / 1024/1024   # 单位g

psutil.swap_memory()								# 获取交换分区信息

import psutil										
def bytes2human(n):
     symbols = ('K','M','G','T','P','E','Z','Y')
     prefix = {}
     en = enumerate(symbols)
     for i in en : print( i)
     for i,s in enumerate(symbols):

         prefix[s] = 1 << (i + 1) * 10
         print(prefix)
     for s in reversed(symbols):
         if n >= prefix[s]:
             value = float(n) / prefix[s]
             return '%.1f%s' % (value,s)
     return '%sB' % n
print(bytes2human(psutil.swap_memory().total))

磁盘相关

psutil.disk_partitions()        # 打印分区信息
psutil.disk_usage('/')			 # 查看分区使用情况
psutil.disk_usage(r'C:\\').total / 1024 / 1024 /1024)

psutil.disk_io_counters()       # 查看 IO
psutil.disk_io_counters(perdisk=True) # 分别列出单个磁盘的统计信息

网络相关

psutil.net_io_counters() 							# 获取网络读写字节/包的个数
psutil.net_io_counters().bytes_recv / 1024 /1024 	# 获取网络读写字节/包的个数
psutil.net_if_addrs() 								# 以字典的形式返回网卡的配置信息,包括IP地址和mac地址、子网掩码和广播地址。
psutil.net_if_stats()							    # 返回网卡的详细信息,包括是否启动、通信类型、传输速度与mtu。
str(psutil.net_connections(kind='tcp')).count('ESTABLISHED')

print(psutil.users())       						# 以命名元组的方式返回当前登陆用户的信息,包括用户名,登陆时间,终端,与主机信息
print(psutil.boot_time())   						# 时间戳返回系统的启动时间

进程相关

psutil.pids()				# 以列表的形式返回当前正在运行的进程
psutil.pid_exists(0) 		# 判断给点定的pid是否存在
ps = psutil.process_iter() 	# 迭代当前正在运行的进程,返回的是每个进程的Process对象
for i in ps: print(i)
print(psutil.Process(0)) 	# 对进程进行封装,可以使用该类的方法获取进行的详细信息,或者给进程发送信号。

name:			获取进程的名称
cmdline:		获取启动进程的命令行参数
create_time:	获取进程的创建时间(时间戳格式)
num_fds:		进程打开的文件个数
num_threads:	进程的子进程个数
is_running:	判断进程是否正在运行
send_signal:	给进程发送信号,类似与os.kill等
kill:			发送SIGKILL信号结束进程
terminate:		发送SIGTEAM信号结束进程

shutil

高级的 文件, 文件夹, 压缩包 处理模块.

shutil.copyfileobj('fsrc','fdst',length=1024)   		 # 强文件内容拷贝到另外一个文件中,可以使部分内容.

shutil.copyfile(src='src', dst='dst')                    # 拷贝文件
shutil.copymode(src='src', dst='dst')                    # 仅仅拷贝权限,内容,组,用户 权限不变
shutil.copystat(src='src', dst='dst')                    # 拷贝状态的信息.包括 mode bits, atime,mtime,flags
shutil.copy(src='src', dst='dst')                        # 拷贝文件和权限.
shutil.copy2(src='src', dst='dst')                       # 拷贝文件和状态信息.
shutil.copytree('source', 'destination', symlinks=True,ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))		# 递归拷贝文件 拷贝符号链接文件,指定排除的文件
shutil.rmtree('path',ignore_errors=True,)       		# 递归删除文件,忽略错误
shutil.move(src='src', dst='dst')               		# 递归移动文件

shutil.make_archive(base_name='/root/txt.zip',format='zip',root_dir='/etc/fstab')
'''
创建压缩包并返回文件路径,例如:zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
    如:www                        =>保存至当前路径
    如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
format: 	压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir:  要压缩的文件夹路径(默认当前目录)
owner: 	用户,默认当前用户
group: 	组,默认当前组
logger: 	用于记录日志,通常是logging.Logger对象
'''

  

 

posted @ 2020-08-23 01:58  闫世成  阅读(90)  评论(0)    收藏  举报