「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》

os模块详解
- 1、文件目录操作
- os.stat() 获取文件状态
- os.utime() 修改文件时间
- os.rename() 修改文件/目录
- os.renames() 递归修改文件/目录
- os.replace() 替换文件/目录
- os.remove() 删除文件
- os.getcwd() 获取工作目录
- os.getcwdb() 获取工作目录
- os.chdir() 修改工作目录
- os.mkdir() 创建目录
- os.makedirs() 创建多级目录
- os.rmdir() 删除目录
- os.removedirs() 删除多级目录
- 2、系统信息
- os.name 获取操作系统类型
- os.environ 获取环境变量
- os.getenv() 获取环境变量
- os.get_exec_path() 获取可执行文件路径
- os.cpu_count() 获取CPU数量
- os.getlogin() 获取登录用户
- os.getpid() 获取当前进程ID
- os.getppid() 获取父进程ID
- os.urandom() 获取随机字节
- 2、进程管理
- os.times() 获取进程时间
- os.abort() 中断当前进程
- os.system() 执行系统命令
- os.popen() 执行shell命令
- os.startfile() 打开文件
- 3、错误/异常
- BlockingIOError
- ChildProcessError
- ConnectionError
- BrokenPipeError
- ConnectionAbortedError
- ConnectionRefusedError
- ConnectionResetError
- FileExistsError
- FileNotFoundError
- InterruptedError
- IsADirectoryError
- NotADirectoryError
- PermissionError
- ProcessLookupError
- TimeoutError
OS标准库是操作系统接口模块,提供了操作系统相关功能的调用函数。
使用OS标准库前,需要导入模块 import os
1、文件目录操作
os.stat() 获取文件状态
获取文件或文件描述符的状态,返回一个 stat_result 对象。
stat_result对象有很多可以调用的属性:
- st_atime:最近访问时间,单位秒
- st_mtime:最近修改时间,单位秒
- st_ctime:文件创建时间(Windows),修改时间(unix),单位秒
- st_size:文件大小,单位字节
- st_uid:文件所有者的ID
- st_nlink:硬链接数量
- st_dev:文件所在设备的标识符
- st_ino:文件的唯一标识(Windows是文件索引号,Unix是索引节点号)
- st_mode:文件模式,包括文件类型和文件模式位(即权限位)。
- st_atime_ns:最近访问时间,单位纳秒
- st_mtime_ns:最近修改时间,单位纳秒
- st_ctime_ns:文件创建时间(Windows),修改时间(unix),单位纳秒
还有一些属性需要在Unix系统上才能调用:
- st_blocks:文件的字节块数,每块512字节。
- st_blksize:“首选的” 块大小,用于提高文件系统 I/O 效率。写入文件时块大小太小可能会导致读取-修改-重写效率低下。
- st_rdev:设备类型(针对inode设备)
- st_flags:文件标志位(用户定义的)
- st_gen:文件生成号
- st_birthtime:文件创建时间
os.utime() 修改文件时间
修改文件的访问时间和修改时间,修改后需要重新获取 stat_result 对象,才会更新。
语法
os.uime( path, (atime, mtime))
参数
- path:(必选)文件路径
- atime:(必选)文件访问时间
- mtime:(必选)文件修改时间
实例
import osos.utime('newDir/myFile', (1491413771, 1591413771))
statResult = os.stat('newDir/myFile')
print(statResult.st_atime)
print(statResult.st_mtime)
输出:
1491413771.0
1591413771.0
os.rename() 修改文件/目录
修改文件名或目录名。
语法
os.rename( src, dst )
参数
- src:(必选)源文件/目录,即需要修改的文件/目录
- dst:(必选)目的文件/目录,即修改后的文件/目录
实例
import osos.rename('myFile', 'newName')
对于Windows系统,文件名已存在会报错 FileExistsError。
对于Unix系统,将文件重命名为目录会报错 IsADirectoryError;将目录重命名为文件会报错 NotADirectoryError。
os.renames() 递归修改文件/目录
递归修改文件名或目录名。先创建所需要的中间目录,重命名后,再调用 removedirs() 删除旧路径中不需要的目录。
语法
os.renames( old, new )
参数
- old:(必选)旧路径
- new:(必选)新路径
实例
import osos.renames('myFile', 'newDir/myFile')
os.replace() 替换文件/目录
修改文件名或目录名,如果文件名已存在,则会静默修改;如果目录已存在,则会报错 OSError。
语法
os.replace( old, new )
参数
- old:(必选)修改前的路径
- new:(必选)修改后的路径
实例
import osos.replace('myFile', 'newDir/myFile')
os.remove() 删除文件
删除文件,删除目录会报错 FileNotFoundError
语法
os.remove( path )
参数
- path:(必选)文件路径(绝对路径/相对路径)
实例
import osos.remove('myFile')
os.getcwd() 获取工作目录
获取当前工作目录,也就是当前所在路径,返回字符串类型。
import osprint(os.getcwd())
输出:
E:\data\PrCharm\pythonProject1
os.getcwdb() 获取工作目录
获取当前工作目录,二进制序列(bytes)类型。
import osprint(os.getcwdb())
输出:
b'E:\\data\\PrCharm\\pythonProject1'
os.chdir() 修改工作目录
修改当前工作目录
语法
os.chdir( path )
参数
- path:(必选,str类型)需要修改的路径
实例
import osos.chdir('E://data')
print(os.getcwd())
输出:
E:\data
os.mkdir() 创建目录
创建目录,如果目录已存在会报错 FileExistsError,如果路径中父目录不存在会报错 FileNotFoundError。
语法
os.mkdir( path, mode )
参数
- path:(必选)目录的路径(绝对路径/相对路径)
- mode:目录的权限(某些系统会忽略)
实例
import osos.mkdir('myDir')
当前目录下创建了目录

os.makedirs() 创建多级目录
创建多级目录,上级目录不存在也会自动创建。
语法
os.makedirs( path, mode )
参数
- path:(必选)目录的路径(绝对路径/相对路径)
- mode:目录的权限(某些系统会忽略)
实例
import osos.makedirs('myDir/dir1')
当前目录下创建了目录

os.rmdir() 删除目录
删除目录,如果目录不存在,会报错 FileNotFoundError;如果目录不为空,会报错 OSError。
语法
os.rmdir( path )
参数
- path:(必选)需要删除的目录(绝对路径/相对路径)
实例
import osos.rmdir('newDir')
os.removedirs() 删除多级目录
递归删除多级目录,如果删除了最后一级目录,会尝试依次删除上级目录(删除不掉不会报错,因为大多是因为目录不为空)。
语法
os.removedirs( path )
参数
- path:(必选)目录路径
实例
import osos.removedirs('myDir/dir1')
2、系统信息
os.name 获取操作系统类型
获取操作系统的类型,只有三个值nt、posix、java
- nt:Windows系统
- posix:Linux/mac系统
- java:java虚拟机
比如,我的电脑是Windows,就返回 nt
import osprint(os.name)
输出:
nt
os.environ 获取环境变量
获取系统环境变量等各种系统信息(导入OS模块时自动收集),字典格式,可以根据建获取
Windows常用字段
os.environ['HOMEPATH'] # 当前用户主目录。
os.environ['TEMP'] # 临时目录路径。
os.environ["PATHEXT"] # 可执行文件。
os.environ['SYSTEMROOT'] # 系统主目录。
os.environ['LOGONSERVER'] # 机器名。
Linux常用字段
os.environ['USER'] # 当前使用用户。
os.environ['LC_COLLATE'] # 路径扩展的结果排序时的字母顺序。
os.environ['SHELL'] # 使用shell的类型。
os.environ['LAN'] # 使用的语言。
os.environ['SSH_AUTH_SOCK'] # ssh的执行路径。
环境变量的增删改查操作
import osenviron = os.environ
# 新增
environ['环境变量名'] = '环境变量值'
# 删除
del environ['环境变量名']
# 修改
environ['环境变量名'] = '新环境变量值'
# 查询(变量不存在则返回默认值)
environ['环境变量名']
environ.get('环境变量名', '默认值')
# 判断(存在返回True,不存在返回False)
'环境变量值' in environ
os.getenv() 获取环境变量
根据环境变量名,获取环境变量的值,如果环境变量名不存在,就返回default。
语法
os.getenv( key, default )
参数
- key:(必选,str类型)环境变量名
- default:(可选)环境变量不存在时返回,默认值是 None
实例
import osprint(os.getenv('TEMP'))
输出:
C:\Users\WANGYU~1\AppData\Local\Temp
os.get_exec_path() 获取可执行文件路径
获取可执行文件路径,从 environ 对象中,返回可执行文件目录的列表。
语法
os.get_exec_path( environ )
参数
- environ:(可选)默认值None,即使用当前的 environ。
实例
import osprint(os.get_exec_path())
输出:
['E:\\data\\PrCharm\\pythonProject1\\venv\\Scripts', 'C:\\......
os.cpu_count() 获取CPU数量
返回系统的CPU数量,不确定就返回None。
语法
os.cpu_count()
实例
import osprint(os.cpu_count())
输出:
8
os.getlogin() 获取登录用户
获取当前登录用户,准确来说,是通过控制终端进程进行登录的用户名。
import osprint(os.getlogin())
os.getpid() 获取当前进程ID
获取当前进程ID
import osprint(os.getpid())
输出:
8212
os.getppid() 获取父进程ID
获取当前进程的父进程ID
import osprint(os.getppid())
输出:
14132
os.urandom() 获取随机字节
获取指定大小的随机字节,常用于加密。
语法
os.urandom( size )
参数
- size:(必选)指定随机字节的大小
实例
mport osprint(os.urandom(8))
输出:
b'\xb1\n\xbaw2\x88\x84\xf8'
2、进程管理
创建和管理进程的函数。
os.times() 获取进程时间
返回当前的全局进程时间,列表形式,有5个属性。
- user:用户时间
- system:系统时间
- children_user:所有子进程的用户时间
- children_system:所有子进程的系统时间
- elapsed:从过去的固定时间点起,经过的真实时间
Windows系统上,只有user、system两个属性有值,其他均为0。
语法
os.times()
实例
import ostimes = os.times()
print(times)
输出:
nt.times_result(user=0.046875, system=0.109375, children_user=0.0, children_system=0.0, elapsed=0.0)
os.abort() 中断当前进程
发送SIGABRT信号给当前进程,用来终止进程,如果进程没有中断,则函数不会返回。
- Unix系统会生成一个核心转储文件
- Windows系统立即返回退出代码
语法
os.abort()
比如,当程序出现严重错误时,调用 os.abort() 终止进程。
import ostry:# 业务代码pass
except:os.abort()
补充:
- SIGABRT用来中止一个程序,处理函数返回后,所有打开的文件描述符将会被关闭,流也会被flush,程序也会结束。
- SIGABRT是一个暴力信号,可能会破坏进程的状态,应该谨慎使用。
os.system() 执行系统命令
执行系统命令,并在控制台输出执行结果
语法
os.system( commend )
参数
- commend:(必选)需要执行的命令
实例
import osos.system('ping www.baidu.com')
输出:
���� Ping www.a.shifen.com [39.156.66.18] ���� 32 �ֽڵ�����:
���� 39.156.66.18 �Ļظ�: �ֽ�=32 ʱ��=17ms TTL=50
���� 39.156.66.18 �Ļظ�: �ֽ�=32 ʱ��=16ms TTL=50
os.popen() 执行shell命令
通过Python执行系统命令,返回命令的执行结果(文本类型的对象)。
语法
os.popen( command, mode, buffer )
参数
- command:(必选)需要执行的命令
- mode:(可选)文件打开模式,默认值
r(只读模式) - buffer:缓冲区大小,
实例
import osout = os.popen('ping www.baidu.com')
print(out.read())
输出:
正在 Ping www.a.shifen.com [39.156.66.14] 具有 32 字节的数据:
来自 39.156.66.14 的回复: 字节=32 时间=13ms TTL=50
来自 39.156.66.14 的回复: 字节=32 时间=48ms TTL=50
os.startfile() 打开文件
自动打开文件,绝对路径要用/,相对路径要用 \
语法
os.startfile( path )
实例
import osos.startfile('newDir\myFile')
执行后,桌面上会打开指定的文件。
3、错误/异常
OS模块所有函数都会抛出OSError及其子类
BlockingIOError
OSError的子类
当在设置为非阻塞操作的对象(例如:套接字)上,执行阻塞操作时触发。
ChildProcessError
OSError的子类
子进程上的操作失败时触发。
ConnectionError
OSError的子类
与连接相关的问题的基类,常见的有它的子类。
BrokenPipeError
ConnectionError的子类
管道中断时触发。
管道是单向通信的,在管道另一端关闭时写入,或者在已经关闭的套接字上写入,都会导致管道中断。
ConnectionAbortedError
ConnectionError的子类
连接被对端终止时触发。
这种异常通常意味着网络连接被意外中断,可能是服务器出现故障、网络拥堵等原因导致的,比如 服务器返回的响应超时或断开了连接。
ConnectionRefusedError
ConnectionError的子类
连接被对方拒绝时触发。
常见的原因有:
- 你想连接的服务器没有启动相关服务
- 防火墙阻止连接
- 端口被占用,关闭占用端口的服务
- IP或端口错误
ConnectionResetError
ConnectionError的子类
对端重置连接时触发。
常见的原因有:
- 高延迟或丢包等网络错误导致连接中断
- 防火墙等ACL访问控制出于安全原因阻止了连接
FileExistsError
OSError的子类
创建的文件或目录已经存在时触发
FileNotFoundError
OSError的子类
请求的文件或目录不存在时触发
InterruptedError
OSError的子类
系统调用被传入信号中断时触发
IsADirectoryError
OSError的子类
对目录执行文件操作时触发
NotADirectoryError
OSError的子类
对文件执行目录操作时触发
PermissionError
OSError的子类
执行的操作没有足够的访问权限时触发
ProcessLookupError
OSError的子类
指定的进程不存在时触发
TimeoutError
OSError的子类
系统功能在系统级别的超时时触发