Python os模块详解:系统信息与进程管理实战
本文深入解析Python标准库os模块的核心功能,涵盖获取操作系统名称、环境变量、用户信息及CPU数量等系统属性。详细演示os.urandom等函数的使用,并重点介绍abort、exec系列、fork、kill及system等进程管理函数的具体用法与注意事项,帮助开发者掌握Python与操作系统交互的关键技术。
os模块概述与系统信息获取
os模块封装了程序所运行的操作系统接口,主要职责是提供获取当前运行环境相关信息的途径。
在Python交互式环境中导入os模块后,执行os.__all__命令(该变量列出了模块公开暴露的接口),即可查看该模块包含的所有属性和函数列表。
以下仅列举os模块中高频使用的属性与函数:
- os.name:返回当前导入的依赖模块所对应的操作系统名称,返回值通常为'posix'、'nt'或'java'之一。
- os.environ:返回包含当前系统所有环境变量的字典对象。
- os.fsencode(filename):对类路径(path-like)类型的文件名进行编码处理。
- os.fsdecode(filename):对类路径(path-like)类型的文件名进行解码处理。
- os.PathLike:这是一个抽象基类,用于表示类路径(path-like)对象。
- os.getenv(key, default=None):用于获取指定名称的环境变量值。
- os.getlogin():返回当前系统的登录用户名。此外,os.getuid()、os.getgroups()和os.getgid()等函数分别用于获取用户ID、用户组列表及组ID,这些函数通常仅在UNIX类系统上有效。
- os.getpid():获取当前运行进程的ID。
- os.getppid():获取当前进程父进程的ID。
- os.putenv(key, value):用于设置或修改环境变量。
- os.cpu_count():返回当前系统可用的CPU核心数量。
- os.sep:返回当前操作系统的路径分隔符。
- os.pathsep:返回当前系统上多条路径字符串之间的分隔符。在Windows系统中,该分隔符为英文分号(;);而在UNIX及类UNIX系统(如Linux、Mac OS X)中,该分隔符为英文冒号(:)。
- os.linesep:返回当前系统的换行符。Windows系统使用“\r\n”,UNIX系统使用“\n”,而Mac OS X系统使用“\r”。
- os.urandom(size):返回一个由最多N个字节组成的bytes对象,其内容源自操作系统特定的随机源,具有不可预测性,适用于加密场景。
os模块常用函数实战示例
以下代码示例展示了os模块中多数函数的实际应用:
import os
# 显示导入依赖模块的操作系统的名称
print(os.name)
# 获取PYTHONPATH环境变量的值
print(os.getenv('PYTHONPATH'))
# 返回当前系统的登录用户名
print(os.getlogin())
# 获取当前进程ID
print(os.getpid())
# 获取当前进程的父进程ID
print(os.getppid())
# 返回当前系统的CPU数量
print(os.cpu_count())
# 返回路径分隔符
print(os.sep)
# 返回当前系统的路径分隔符
print(os.pathsep)
# 返回当前系统的换行符
print(os.linesep)
# 返回适合作为加密使用的、最多3个字节组成的bytes
print(os.urandom(3))
执行上述代码后,控制台输出结果如下:
nt None yeeku 9904 12036 8 \ ;
b'\x12\x1e\xcf'
分析上述输出可知:在Windows环境下,Python导入的操作系统模块名称为“nt”;当前登录用户名为“yeeku”;当前进程ID为“9904”;父进程ID为“12036”;系统CPU数量为8个;路径分隔符为“\”;多条路径间的分隔符为分号(;)。值得注意的是,Windows的换行符“\r\n”在控制台输出时表现为两个空行,因此视觉上不明显。
此外,os模块还包含大量用于文件和目录操作的功能函数,这些内容将在后续章节中专门介绍。
进程管理函数详解
os模块还提供了多种进程管理函数,可用于启动新进程、终止现有进程等。与进程管理相关的主要函数如下:
os.abort():向当前进程发送SIGABRT信号。在UNIX系统上,默认行为是生成内核转储(core dump);在Windows系统上,进程会立即退出并返回退出码3。
os.execl(path, arg0, arg1, ...):该函数及其变体(如os.execle()、os.execlp()等)使用参数列表arg0, arg1...来执行path指定的可执行文件。
os.forkpty():fork出一个子进程,并打开一个伪终端。
os.kill(pid, sig):向指定进程ID(pid)发送信号(sig),常用于终止该进程。
os.killpg(pgid, sig):向指定进程组ID(pgid)发送信号(sig)。
os.popen(cmd, mode='r', buffering=-1):打开一个管道以执行cmd命令。mode参数为'r'时只读,为'rw'时读写;buffering参数含义与内置open()函数一致。该函数返回的文件对象用于读写字符串而非字节。
os.spawnl(mode, path, ...):该函数及其变体(如os.spawnle()、os.spawnlp()等)用于在新进程中执行新程序。
os.startfile(path[,operation]):调用与指定文件关联的应用程序执行指定操作。若不指定operation,默认执行“open”(打开)。operation参数需为有效的命令行操作,如“open”、“edit”或“print”。
os.system(command):在操作系统中运行指定的命令字符串。
进程管理代码演示与注意事项
以下代码演示了os模块中进程管理相关函数的具体功能:
import os
# 运行平台上的cmd命令
os.system('cmd')
# 使用Excel打开g:\abc.xls文件
os.startfile('g:\\abc.xls')
os.spawnl(os.P_NOWAIT, 'E:\\Tools\\编辑工具\\Notepad++.7.5.6.bin.x64\\notepad++.exe', ' ')
# 使用python命令执行os_test.py程序
os.execl("D:\\Python\\Python36\\python.exe", " ", 'os_test.py', 'i')
直接运行上述代码,可以看到程序使用Excel打开了abe.xls文件,启动了Notepad++编辑器,并通过python命令执行了os_test.py脚本。然而,如果取消注释代码中的粗体部分(调用os.system()),则只会看到cmd命令行窗口被启动。这是因为os.system()执行新程序时,新进程会替换当前进程。
os模块使用建议与总结
知识点补充:
os是“operating system”的缩写,该模块提供了Python程序与操作系统交互的接口。使用os模块既能方便地与系统交互,又能显著增强代码的可移植性。若模块中相关功能发生错误,将抛出OSError异常或其子类异常。
注意
若涉及文件读写操作,建议优先使用内置函数open();
若涉及路径相关操作,建议使用os的子模块os.path;
若需逐行读取多个文件,建议使用fileinput模块;
若需创建临时文件或路径,建议使用tempfile模块;
若需进行更高级的文件和路径操作,应当使用shutil模块。
至此,关于Python os模块及其用法的介绍完毕。如需了解更多Python os模块相关内容,请搜索本站历史文章或继续浏览后续文章,感谢支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













