news 2026/7/24 5:24:26

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/7/24 1:01:08

推荐这个一站式AI视频生成平台,全链路打造爆款电影解说

做影视解说或者短视频矩阵的朋友,现在的你是不是正陷入一种“伪勤奋”的怪圈?为了做一条视频,你打开了ChatGPT写文案,打开剪映剪辑,又打开配音软件生成音频,甚至还得找翻译软件搞定素材……看起来忙得不可开…

作者头像 李华
网站建设 2026/7/23 7:21:25

Puppeteer vs. Playwright —— 哪个更好?

Puppeteer vs. Playwright —— 哪个更好? 在现代浏览器自动化任务中,Playwright 和 Puppeteer 是两款非常值得关注的工具。我在做网页抓取等场景时,对它们的差异与相似点做过不少对比。 Playwright 和 Puppeteer 都提供了用于端到端测试的…

作者头像 李华
网站建设 2026/7/22 8:28:12

MySQL内连和外连

1. 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选只写 JOIN ... ON 等价于 INNER JOIN ... ON(内连接) 语法 select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件; 备注:前面学习的都是内连…

作者头像 李华
网站建设 2026/7/24 14:26:54

商汤发布如影营销智能体,五大智能体全链协同打造直播电商增长飞轮

近年来,直播电商迈入发展快车道。预计2025年,中国直播电商市场规模将突破6万亿。直播电商爆发增长的背后,离不开主播、场控、直播运营、店铺运营、投流、内容制作等多种岗位紧密配合。然而,随着人力效率逐步见顶,运营成…

作者头像 李华
网站建设 2026/7/22 18:11:04

Flutter:开启跨平台应用开发的新纪元

标题:Flutter:开启跨平台应用开发的新纪元 引言 在移动互联网高速发展的今天,用户对应用的性能、体验和交付速度提出了更高的要求。与此同时,开发者面临着为多个平台(如 iOS、Android、Web 和桌面)分别开…

作者头像 李华
网站建设 2026/7/24 17:17:53

9个AI写作工具,助你轻松搞定本科论文!

9个AI写作工具,助你轻松搞定本科论文! 论文写作的“隐形助手”正在改变你的学习方式 在当今信息化时代,AI 技术已经渗透到我们生活的方方面面,而学术写作也迎来了全新的变革。对于本科生而言,撰写一篇高质量的本科论文…

作者头像 李华