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.stats解释
ctx_switches 启动后的上下文切换次数
interrupts 自引导以来的中断数
soft_interrupts 自引导以来的软件中断次数
syscalls 自引导以来的系统调用次数
内存相关
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对象
'''
作者:闫世成
出处:http://cnblogs.com/yanshicheng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。

浙公网安备 33010602011771号