news 2026/5/8 7:19:23

Python语言之OS模块各部将简单介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python语言之OS模块各部将简单介绍

os模块是 Python 标准库中最强大、功能最丰富的模块之一,除了os.path外,它主要包含以下几大类功能

1.文件和目录操作

importos# 创建和删除目录os.mkdir('new_dir')# 创建单个目录os.makedirs('dir1/dir2/dir3')# 递归创建多级目录os.rmdir('empty_dir')# 删除空目录os.removedirs('a/b/c')# 递归删除空目录# 文件操作os.rename('old.txt','new.txt')# 重命名文件/目录os.remove('file.txt')# 删除文件os.unlink('file.txt')# 删除文件(同remove)# 目录遍历print(os.listdir('.'))# 列出目录内容forroot,dirs,filesinos.walk('.'):# 递归遍历目录树forfileinfiles:print(os.path.join(root,file))# 其他操作os.truncate('file.txt',1024)# 截断文件到指定大小os.sync()# 强制将缓冲区写入磁盘

2.文件描述符和低级文件操作

importos# 使用文件描述符(低级I/O)fd=os.open('test.txt',os.O_RDWR|os.O_CREAT)# 返回文件描述符os.write(fd,b'Hello World\n')os.lseek(fd,0,os.SEEK_SET)# 移动文件指针data=os.read(fd,100)# 读取数据os.close(fd)# 关闭文件描述符# 文件描述符操作os.dup(fd)# 复制文件描述符os.dup2(old_fd,new_fd)# 复制到指定描述符os.pipe()# 创建管道,返回(r, w)两个描述符# 文件锁importfcntl# 需要单独导入fcntl.flock(fd,fcntl.LOCK_EX)# 排他锁

3.进程管理

importos# 进程信息print(f"进程ID:{os.getpid()}")# 当前进程IDprint(f"父进程ID:{os.getppid()}")# 父进程IDprint(f"进程组ID:{os.getpgid(0)}")# 进程组IDprint(f"会话ID:{os.getsid(0)}")# 会话ID# 进程控制pid=os.fork()# 创建子进程(Unix)ifpid==0:print("子进程")os._exit(0)# 退出子进程else:os.waitpid(pid,0)# 等待子进程结束# 执行系统命令exit_code=os.system('ls -la')# 执行shell命令os.execv('/bin/ls',['ls','-la'])# 替换当前进程# 进程信号os.kill(pid,9)# 发送信号给进程os.killpg(pgid,signal.SIGTERM)# 发送信号给进程组

4.环境变量和系统信息

importos# 环境变量操作print(os.environ)# 所有环境变量的字典print(os.getenv('PATH'))# 获取特定环境变量os.environ['MY_VAR']='value'# 设置环境变量(当前进程)os.putenv('MY_VAR','value')# 设置环境变量os.unsetenv('MY_VAR')# 删除环境变量# 系统信息print(f"操作系统:{os.name}")# 操作系统名称(posix, nt, java)print(f"当前用户:{os.getlogin()}")# 登录用户名print(f"CPU数量:{os.cpu_count()}")# CPU核心数print(f"进程优先级:{os.getpriority(os.PRIO_PROCESS,0)}")# 进程优先级

5.用户和权限管理

importosimportpwd# Unix专用importgrp# Unix专用# 用户和组信息(Unix)print(f"当前用户ID:{os.getuid()}")# 用户IDprint(f"当前组ID:{os.getgid()}")# 组IDprint(f"有效用户ID:{os.geteuid()}")# 有效用户IDprint(f"有效组ID:{os.getegid()}")# 有效组ID# 更改权限os.chmod('file.txt',0o755)# 更改文件权限os.chown('file.txt',1000,1000)# 更改文件所有者(Unix)os.lchown('symlink',1000,1000)# 更改符号链接所有者# 切换用户上下文(需要权限)os.setuid(1000)# 设置用户IDos.setgid(1000)# 设置组IDos.initgroups('username',1000)# 初始化组列表

6.终端和输入输出

importosimportsys# 终端操作print(f"终端大小:{os.get_terminal_size()}")# 获取终端尺寸print(f"是否连接终端:{os.isatty(sys.stdout.fileno())}")# 检查是否为终端# 标准输入输出描述符stdin_fd=sys.stdin.fileno()# 标准输入文件描述符(0)stdout_fd=sys.stdout.fileno()# 标准输出文件描述符(1)stderr_fd=sys.stderr.fileno()# 标准错误文件描述符(2)# 重定向# os.dup2(new_fd, stdout_fd) # 重定向标准输出

7.资源管理

importosimportresource# 需要单独导入# 资源限制resource.getrlimit(resource.RLIMIT_CPU)# CPU时间限制resource.getrlimit(resource.RLIMIT_DATA)# 数据段大小限制resource.getrlimit(resource.RLIMIT_STACK)# 栈大小限制resource.getrlimit(resource.RLIMIT_NOFILE)# 文件描述符数量限制# 设置资源限制resource.setrlimit(resource.RLIMIT_NOFILE,(1024,4096))# 获取资源使用情况usage=resource.getrusage(resource.RUSAGE_SELF)print(f"用户CPU时间:{usage.ru_utime}")print(f"系统CPU时间:{usage.ru_stime}")print(f"最大内存使用:{usage.ru_maxrss}")

8.时间和统计信息

importosimporttime# 文件状态信息stat_info=os.stat('file.txt')print(f"文件大小:{stat_info.st_size}字节")print(f"最后修改:{time.ctime(stat_info.st_mtime)}")print(f"最后访问:{time.ctime(stat_info.st_atime)}")print(f"创建时间:{time.ctime(stat_info.st_ctime)}")# Unix: 最后元数据更改# 特殊文件操作os.utime('file.txt',times=None)# 更新访问和修改时间os.makedev(major,minor)# 创建设备号(Unix)os.major(device)# 获取主设备号os.minor(device)# 获取次设备号

9.高级系统调用

importos# 内存映射importmmapwithopen('data.bin','r+b')asf:mm=mmap.mmap(f.fileno(),0)mm[0:100]=b'X'*100mm.close()# 共享内存(Unix)# shm_fd = os.shm_open('/myshm', os.O_CREAT | os.O_RDWR, 0o600)# os.ftruncate(shm_fd, 1024)# 异步I/Oos.posix_fadvise(fd,offset,length,os.POSIX_FADV_WILLNEED)# 预读建议os.sync_file_range(fd,offset,length,os.SYNC_FILE_RANGE_WRITE)# 同步文件范围

10.平台特定功能

importosimportsys# 检查平台ifos.name=='posix':# Unix/Linux/Mac 特定功能importpwdimportgrpelifos.name=='nt':# Windows 特定功能importwinregimportctypes# Windows API 调用ctypes.windll.kernel32.SetConsoleTitleW("My Console")# Windows 特殊路径print(os.startfile('document.pdf'))# 用关联程序打开文件os.system('start explorer .')# 打开资源管理器# 跨平台路径处理(除了os.path)print(os.sep)# 路径分隔符(Unix: /, Windows: \)print(os.altsep)# 替代路径分隔符(Unix: None, Windows: /)print(os.extsep)# 扩展名分隔符(.)print(os.pathsep)# PATH环境变量分隔符(Unix: :, Windows: ;)print(os.defpath)# 默认搜索路径print(os.devnull)# 空设备路径(Unix: /dev/null, Windows: nul)

11.杂项实用功能

importos# 随机数生成random_bytes=os.urandom(16)# 加密安全的随机字节random_number=os.random()# 随机数(已弃用,建议用random模块)# 临时文件和目录importtempfile temp_file=tempfile.NamedTemporaryFile(delete=False)temp_dir=tempfile.mkdtemp()# 工作目录操作current_dir=os.getcwd()# 获取当前工作目录os.chdir('/path/to/dir')# 更改工作目录print(f"绝对路径:{os.path.abspath('.')}")# 特殊常量print(f"行结束符:{repr(os.linesep)}")# 系统行结束符print(f"路径分隔符:{repr(os.sep)}")# 路径分隔符# 系统错误try:os.remove('nonexistent.txt')exceptOSErrorase:print(f"错误号:{e.errno}")print(f"错误信息:{e.strerror}")print(f"文件名:{e.filename}")

12.完整功能分类表

类别主要函数/功能说明
文件操作open(),read(),write(),close()低级文件I/O
目录操作mkdir(),makedirs(),rmdir(),listdir(),walk()目录管理
进程管理fork(),exec(),wait(),kill(),getpid()进程控制
环境变量environ,getenv(),putenv(),unsetenv()环境变量操作
用户权限getuid(),getgid(),chmod(),chown()用户和权限
系统信息name,uname(),cpu_count(),getlogin()系统信息
路径常量sep,altsep,pathsep,linesep平台相关常量
终端操作get_terminal_size(),isatty()终端控制
资源管理resource模块配合系统资源限制
特殊设备devnull,makedev(),major(),minor()设备操作

13.实战示例:创建守护进程

importosimportsysimporttimeimportatexitimportsignaldefdaemonize(pidfile=None):"""将当前进程转换为守护进程"""# 第一次fork,创建子进程,父进程退出try:pid=os.fork()ifpid>0:sys.exit(0)# 退出父进程exceptOSErrorase:sys.stderr.write(f"第一次fork失败:{e}\n")sys.exit(1)# 脱离终端控制os.chdir('/')# 更改工作目录到根os.setsid()# 创建新会话os.umask(0)# 重设文件掩码# 第二次fork,禁止进程重新打开控制终端try:pid=os.fork()ifpid>0:sys.exit(0)exceptOSErrorase:sys.stderr.write(f"第二次fork失败:{e}\n")sys.exit(1)# 重定向标准文件描述符sys.stdout.flush()sys.stderr.flush()# 写入PID文件ifpidfile:withopen(pidfile,'w')asf:f.write(str(os.getpid()))# 注册退出时删除PID文件atexit.register(lambda:os.remove(pidfile))# 守护进程主循环whileTrue:# 这里写守护进程的工作time.sleep(1)if__name__=='__main__':daemonize('/tmp/mydaemon.pid')

敲黑板!!@!

os模块是 Python 与操作系统交互的核心接口,它提供了:

  1. 跨平台抽象:统一不同操作系统的API
  2. 底层访问:直接调用系统调用
  3. 资源管理:进程、文件、内存等系统资源管理
  4. 系统信息:获取和操作系统相关的各种信息

关键要点

  • os.path只是os模块的一个子模块,专门处理路径
  • os模块的许多函数在不同平台上行为可能不同
  • 对于高级文件操作,通常使用内置的open()函数
  • 对于进程管理,现代Python更推荐使用subprocess模块
  • 注意权限问题,很多os函数需要相应的系统权限
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 2:08:17

云端算力 云手机 巨 椰

云端算力是指通过云计算技术,将分散在多个服务器上的计算资源整合起来,为用户提供强大计算能力的服务,用户可按需获取和使用这些算力,无需自行搭建和维护硬件设施。云手机则是依托云端算力与存储资源,将手机的核心计算…

作者头像 李华
网站建设 2026/5/6 19:54:43

基于springboot口腔医院信息管理系统

基于Spring Boot的口腔医院信息管理系统是一个高效、安全且易于使用的工具,专为口腔医院设计,以提高管理效率和服务质量。以下是对该系统的详细介绍: 一、系统概述 该系统以Spring Boot框架为基础,结合前端技术(如Vue、…

作者头像 李华
网站建设 2026/4/28 18:15:37

基于springboot港口物流数据分析及可视化的设计与实现

基于Spring Boot的港口物流数据分析及可视化的设计与实现是一个复杂但具有极高实用价值的项目。以下是对该系统的详细介绍: 一、系统背景与意义 随着大数据技术的飞速发展,物流行业正经历着深刻的变革。港口作为物流的重要节点,其数据分析和可…

作者头像 李华
网站建设 2026/5/1 8:08:05

基于Spring Boot 头条文章管理系统

基于Spring Boot 头条文章管理系统 一、系统目标 该系统致力于打造高效可靠的文章发布管理平台,使用户能便捷地发布、编辑、管理文章,并与其他用户进行评论互动。通过文章分类、标签、搜索过滤等功能,助力用户快速定位感兴趣的文章并参与讨论…

作者头像 李华
网站建设 2026/5/8 0:10:50

kafka--基础知识点--6.4--LSO

个人理解&#xff0c;可能有误&#xff0c;仅供参考 LSO: LastStableOffset&#xff0c;分区中第一个未完成事务的起始偏移量&#xff0c;或如果没有未完成事务则为HW。 LSO < HW < LEO LSO起作用必须满足以下所有条件: 同一个分区多个生产者[也可以只有一个]中必须至少有…

作者头像 李华