- 成员变量和无参函数
- 常用单参函数
- 与复制移动重命名相关的函数
- os.path
- 文件描述符操作
- 进程管理
- stat_result
os,即操作系统,os模块提供一些与操作系统交互的接口,是一个非常强大的内置包。由于其内容过多,很大一部分功能我也没用过,如有纰漏之处还望指出,在此谢过。
成员变量和无参函数| (返回)类型 | 成员变量 | |
|---|---|---|
| os.name | 字符串 | 操作系统名称,取值为posix, nt, java 分别代表当前系统为Linux, Windows, java虚拟机 |
| os.environ | 字典 | 当前系统环境变量的键值对 |
| getcwd() | 字符串 | 返回当前工作目录(get the current working directory) |
| getcwdb() | 字节串 | 返回当前工作目录 |
| os.getpid() | int | 返回当前进程ID |
| os.getppid() | int | 返回父进程ID |
| os.abort() | 取消当前进程 | |
| os.getlogin() | 返回当前用户 | |
| os.cpu_count() | int | 返回CPU数目 |
supports_常量
均与操作系统(OS)相关,除supports_bytes_environ外均为集合,下面为其在Windows中的值。
>>> os.supports_bytes_environ
False #若OS上原生环境类型是字节型则为True
>>> os.supports_effective_ids
set() #若当前平台支持effective_ids,则返回os.access()
>>> os.supports_fd #返回支持文件描述符的函数
{, }
>>> os.supports_dir_fd #返回支持dir_fd的函数
set()
>>> os.supports_follow_symlinks #返回follow_symlinks可为False的函数集合
{}
常用单参函数
| 输入 | 输出 | |
|---|---|---|
| listdir | 目录路径 | 输入路径的子路径构成的list 默认输入为当前的工作路径 |
| scandir | 目录路径 | 输入路径的子路径构成的迭代器 |
| walk | 目录路径 | 输入路径的子路径构成的迭代器 |
| mkdir | 目录路径 | 创建一个新的文件夹 该文件夹的父级目录必须已经存在 |
| makedir | 目录路径 | 递归创建新文件夹 |
| remove | 文件路径 | 删除文件 |
| rmdir | 目录路径 | 删除文件夹,文件夹下不得有子文件夹 |
| removedirs | 目录路径 | 递归删除文件夹 |
| chdir | 目录路径 | 改变当前工作路径 |
| add_dll_director | 路径 | 路径添加到DLL搜索路径 |
| get_exec_path | 路径 | 返回用于搜索可执行文件的目录列表 为No,将使用environ |
| fspath | 路径 | 返回路径的文件系统表示。 |
os.rename(src,dst),路径重命名,将src重命名为dst。如果src和dst在不同的目录下,则会进行剪切粘贴。这个操作逻辑和命令行是一致的。
os.renames(src,dst),可创建中间路径的重命名,即递归重命名。
在os包中,makedirs, renames还有removedirs这三个s结尾的文件操作函数,都属于递归性质的路径操作。其中mkdirs, renames允许目标路径的中间路径不存在;removedirs允许删除包含子路径的路径。
>>> os.mkdir(r'testtest') #由于.test不存在,所以会报错 Traceback (most recent call last): File "", line 1, in FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'test\test' >>> os.makedirs(r'testtest')
os.replace顾名思义即替换,相当先删除,再重命名,os.replace('1.txt','2.txt')等价为
os.remove('2.txt')
os.rename('1.txt','2.txt')
os.path
查看源码会看到,在os.py中有这样几行
if 'posix' in _names:
name = 'posix'
linesep = 'n'
from posix import *
#省略若干代码
elif 'nt' in _names:
from nt import *
try:
from nt import _exit
__all__.append('_exit')
except importError:
pass
import ntpath as path
#。。。
该子模块的内容相对来说用得比较多,此前曾经总结过:os.path详解
文件描述符操作关于open和文件类的内容放在了基础功能->文件读写部分,在此讲解部分函数的作用。
fd为文件描述符,一般是正整数,用于链接某个打开的文件。
| 输入为fd的单参函数 | |
|---|---|
| close | 关闭fd |
| device_encoding | 如果连接到终端,则返回fd对应的设备,否则返回None |
| fdatasync | 强制写入fd |
| fstat | 获取fd的状态 |
| fstatvfs | 返回文件的系统信息(Winows无) |
| get_blocking | 获取文件的阻塞模式(Windows无) |
最常用的应该是os.write(fd,str),将字符串str写入fd。
copy_file_range(src,dst,count,offset_src=None,offset_dst):从src复制count到dst,offset可设置对应的偏移量
|closerange(fd_L,fd_H)|关闭从fd_L到fd_H之间的所有文件
Windows中没有的:
- fchmod(fd, mode):将fd的权限修改为mode
- fchown(fd, uid, gid):将fd的所有者和组ID改为uid和gid。
fdopen与open相似,区别在于其第一个参数为整数。关于open以及更多python文件读写功能的操作,请移步:【python标准库】最深入的文件读写详解。
进程管理os模块中封装了一个非常有用的函数,即os.system,实现了一个非常强大的功能——将字符串转化为命令行的命令。
>>> import os
>>> os.system('tree') #tree,输出当前路径下的树状图
卷 文档 的文件夹 PATH 列表
卷序列号为 76C2-48F3
E:.
└─__pycache__
0
>>> os.system('calc') #系统打开了计算器
0
与system相对的应该是kill(sig,pid),其功能为杀死某个进程,其功能为将一个信号sig发送给某个进程pid。
此外,get_terminal_size可返回命令行窗口的尺寸。
os.exec
这些函数用于执行一个新的程序,根据其传入参数数据类型的不同可分为两类,分别是l和v,前者输入为多个参数,后者输入为多个参数组成的元组。
例如os.execl(pro,c1,c2,...cN)等价于os.execv(pro,(c1,c2,...cN))。
| execl | execle | execlp | execlpe |
| execv | execve | execvp | execvpe |
后缀e表示执行命令时,读取特定的环境变量作为默认环境。故以execv为例,其输入参数为os.execv(pro,tup,env),其中tup表示由各参数组成的元组。
后缀p表示在执行命令时,使用系统环境变量path中的路径来查找命令。
stat_result此为状态对象,主要作为 os.stat()、os.fstat() 和 os.lstat() 的返回值,其常用属性主要包括
| st_mode | 文件模式:包括文件类型和文件模式位(即权限位)。 |
| st_ino | Unix上表示索引节点号 Windows上表示文件索引号 |
| st_dev | 设备标识符 |
| st_nlink | 硬链接数量 |
| st_uid | 文件所有者的用户 ID。 |
| st_gid | 文件所有者的用户组 ID。 |
| st_size | 文件大小 |
| st_blocks | 字节块数,每块512字节。文件稀疏时,可能小于st_size/512。 |
| st_blksize | 首选 块大小,用于提高文件系统 I/O 效率。 |
| st_rdev | 设备类型(如果是 inode 设备)。 |
| st_flags | 用户定义的文件标志位。 |
与时间相关
| 访问时间 | 修改时间 | 元数据更改时间(Unix) 创建时间(Windows) | |
|---|---|---|---|
| 秒单位 | st_atime | st_mtime | st_ctime |
| 纳秒单位 | st_atime_ns | st_mtime_ns | st_ctime_ns |



