Python3: 系统平台模块 os、sys、platform

本文链接: https://blog.csdn.net/xietansheng/article/details/115557655

Python3 学习笔记(目录)

1. os — 操作系统接口

Python 官网介绍: os — Miscellaneous operating system interfaces

os模块 系统/进程参数 的部分函数和属性:

os.ctermid()                        # 返回与进程控制终端对应的文件名

os.environ                          # 保存了系统环境变量的 mapping 对象(类似字典)

os.getenv(key, default=None)        # 返回环境变量 key 的值
os.putenv(key, value)               # 设置环境变量(当前进程和子进程有效)
os.unsetenv(key)                    # 删除环境变量(当前进程和子进程有效)

os.get_exec_path(env=None)          # 返回将用于搜索可执行文件的目录列表(PATH 变量中的路径)

os.getpid()                         # 返回当前进程ID
os.getppid()                        # 返回父进程ID
os.getgid()                         # 返回当前进程的实际 组ID
os.getuid()                         # 返回当前进程的真实 用户ID

os.getlogin()                       # 返回通过控制终端进程进行登录的用户名

os.name                             # 操作系统模块的名称, 例如: 'posix', 'nt', 'java'
                                    # 更详细的操作系统信息参考: sys.platform 和 os.uname()
                                    
os.uname()                          # (较新的 Unix 系统才有效) 返回当前操作系统的识别信息, 
                                    # 返回对象有 5 个人属性:
                                    # sysname:  操作系统名称
                                    # nodename: 机器再网络上的名称
                                    # release:  操作系统发行信息
                                    # version:  操作系统版本
                                    # machine:  硬件标识

os模块执行 shell 命令:

# 在子 shell 中执行命令(字符串)。该函数是调用标准 C 函数 system() 来实现的,
# 因此限制条件与该函数相同。对 sys.stdin 等的更改不会反映在执行命令的环境中。
# command 产生的任何输出将被发送到解释器标准输出流。
# 返回一个 int 类型的 code,一般返回 0 表示执行成功。
os.system(command)

# 打开一个管道执行 cmd 命令, 返回值是连接到管道的 文件对象。
# 只能和管道单向通讯, 返回值只能是 写入 或 读取 对象。
# mode 为 'r', 表示返回的的是 读取对象, 可以对管道 read()、 readlines()
# mode 为 'w', 表示返回的的是 写入对象, 可以对管道 write()、writelines()
# 返回的文件对象只能读写字符串, 不能是字节类型。
os.popen(cmd, mode='r', buffering=-1)

os模块 文件处理 的部分函数和属性:

os.getcwd()                                     # 获取当前工作目录
os.chdir(path)                                  # 改变当前工作目录

os.chmod(path, mode, follow_symlinks=True)      # 修改路径的模式和权限
os.chown(path, uid, gid, follow_symlinks=True)  # 修改路径的所有者用户和组

os.mkdir(path, mode=0o777)                      # 创建文件夹
os.makedirs(name, mode=0o777, exist_ok=False)   # 创建多级文件夹
os.removedirs(name)                             # 删除多级文件夹
os.rmdir(path)                                  # 删除文件夹
os.remove(path)                                 # 删除文件
os.unlink(path)                                 # 删除文件

os.rename(src, dst)                             # 将文件/目录src重命名为dst
os.renames(old, new)                            # 递归重命名文件/目录
os.replace(src, dst)                            # 将文件/目录src重命名为dst

os.stat(path)       # 获取文件的状态信息(大小, 时间等)返回 os.stat_result 对象

2. sys — 系统相关的参数和函数

Python 官网介绍: sys — System-specific parameters and functions

sys模块的部分函数和属性:

sys.argv                # 字符串列表, 其中包含了被运行的脚本名称和传递给脚本的命令行参数, argv[0] 为脚本的名称, 
                        # 如果没有脚本被传递给解释器(直接运行解释器), 则 argv[0] 为空字符串。


sys.platform            # 操作系统平台标识符, 例如判断是否是linux: sys.platform.startswith("linux")
                        # 常见的系统对应的值:
                        # ---------------------------------
                        #  System           platform value
                        # ---------------------------------
                        #  AIX              "aix"
                        #  Linux            "linux"
                        #  Windows          "win32"
                        #  Windows/Cygwin   "cygwin"
                        #  MacOS            "darwin"
                        # ---------------------------------
                        # 也可以使用 platform.system() 判断系统名称, 
                        # platform.system() 返回 "Linux", "Darwin", "Java", "Windows"


sys.exit(status=None)   # 退出进程, status 为退出的状态, 默认为 0(即正常退出), 也可以是其他[0, 255]的整数;
                        # status 也可以传递字符串表示错误信息, 如果传递的是字符串, 则退出状态 code 为 1


sys.version             # Python 版本信息, 如: "3.7.3 (***) \n[Clang 6.0 (***)]"
sys.version_info        # Python 版本信息, 以元祖的形式返回, 如: (major=3, minor=7, micro=3)


sya.path                # 由 (zip)文件 或 目录 组成的 列表(list<str>), 
                        # import 导入模块时将从该列表中的文件/目录依次查找模块。
                        #
                        # 启动时从 执行的 py 文件所在路径, 环境变量 PYTHONPATH, 
                        # 以及安装 Python 时的默认设置 取值。
                        #
                        # 其中 sys.path[0] 为被执行的脚本所在目录。
                        # 如执行 python3 /aa/bb/cc.py, 则 sys.path[0] 为 "/aa/bb";
                        # 如果没有脚本被执行(直接运行解释器), 则 sys.path[0] 为空字符串。
                        #
                        # 如果需要在程序中增加导入模块的自定义路径, 可以添加到环境变量 PYTHONPATH 中, 
                        # 添加多个路径使用 os.pathsep 分隔, 也可以在程序中动态添加到 sys.path 列表中。
                        #
                        # sys.path 的值格式参考:
                        #       ['', 
                        #        '${PYTHONPATH}', 
                        #        '.../Python/python3x.zip', 
                        #        '.../Python/lib/python3.x', 
                        #        '.../Python/lib/python3.x/lib-dynload',
                        #        '.../Python/lib/python3.x/site-packages']


sys.modules             # 一个字典, 已加载的所有模块的 名称 -> 模块对象 的映射


sys.thread_info         # 线程信息, 一个元祖, 如: (name='pthread', lock='mutex+cond', version=None)
                        # 元祖的值参考:
                        # -------------------------------------------------------
                        #  属性      说明
                        # -------------------------------------------------------
                        #  name     线程实现的名称: 
                        #               "nt":           Windows 线程
                        #               "pthread":      POSIX 线程
                        #               "solaris":      Solaris 线程
                        #
                        #  lock     锁实现的名称:
                        #               "semaphore":    锁使用信号量
                        #               "mutex+cond":   锁使用互斥和条件变量
                        #                None:          未知名称
                        #
                        #  version  线程库的名称和版本, 字符串类型, 如果未知, 则为 None
                        # -------------------------------------------------------


sys.stdin               # 标准输入 文件对象
sys.stdout              # 标准输出 文件对象
sys.stderr              # 标准错误输出 文件对象


sys.ps1                 # 解释器交互式运行时的主提示, 默认值: ">>> "
sys.ps2                 # 解释器交互式运行时的辅助提示, 默认值: "... "

3. platfrom — 获取底层平台的标识数据

Python 官网介绍: platform — Access to underlying platform’s identifying data

platfrom模块的部分函数和属性:

platform.platform()                 # 平台信息, 如: "Darwin-18.2.0-x86_64-i386-64bit"

platform.system()                   # 系统名称, 如: "Linux", "Darwin", "Java", "Windows"
platform.node()                     # 计算机的网络中名称
platform.release()                  # 系统的版本, 如: "18.2.0"
platform.version()                  # 系统的发行版本, 如: "Darwin Kernel Version 18.2.0: ***"
platform.machine()                  # 机器类型, 如: "arm64"、"AMD64"、"x86_64"、"i386"
platform.processor()                # 真实处理器名称, 如: "arm"、"i386"

platform.uname()                    # 一个元祖, 包含了 6 个属性: 
                                    # uname_result(system='Darwin', 
                                    #              node='******', 
                                    #              release='21.0.1', 
                                    #              version='Darwin Kernel ... /RELEASE_ARM64_T6000', 
                                    #              machine='x86_64',
                                    #              processor='arm64')

platform.python_build()             # 内部版本号和日期, 一个元祖: (buildno, builddate)
platform.python_compiler()          # 编译 Python 的编译器, 如: "Clang 6.0 (clang-600.0.57)"
platform.python_branch()            # 标识 Python 实现 SCM 分支的字符串
platform.python_implementation()    # Python 实现, 如: "CPython"、"IronPython"、"Jython"、"PyPy"
platform.python_revision()          # 标识 Python 实现 SCM 修订版的字符串
platform.python_version()           # Python 版本, 格式为: "major.minor.patchlevel", 如: "3.7.3"
<think>好的,我现在需要帮助用户了解Python中的os模块sys模块和path模块的功能与用法。根据用户的问题,他们可能希望得到清晰的解释和实际的使用示例。首先,我应该回忆这些模块的主要功能,并参考提供的引用资料来确保准确性。 首先,os模块主要用于与操作系统交互,比如文件和目录操作。用户提到的os.path模块其实属于os模块的一部分,但用户可能误以为它是一个独立的模块。我需要明确指出这一点,避免混淆。引用[1]和引用[3]都提到了os.path的用途,比如路径拼接、检查文件是否存在等,应该用这些例子来说明。 接下来是sys模块,它涉及Python解释器的环境,比如命令行参数、模块搜索路径等。引用[2]中的示例展示了如何获取系统路径、编码信息等,这些可以作为sys模块的典型用法。需要解释sys.argv、sys.path等常用功能,并给出代码示例。 然后,关于path模块,用户可能指的是os.path,因为Python中没有单独的path模块。这时候需要澄清这一点,并详细说明os.path的各种方法,如join、exists、basename等。引用[3]中的例子非常适合用来展示os.path.join的使用方法,可以引用过来。 在组织内容时,应该分模块逐一讲解,每个部分先介绍功能,再给出使用方法和示例代码。同时,要确保代码格式正确,符合用户要求的$...$和$$...$$格式,但这里主要是代码块,所以需要注意使用三个反引号包裹代码示例。 另外,用户要求生成相关问题,我需要根据这三个模块的常见疑问点来设计问题,比如模块间的区别、常用函数、实际应用场景等。 现在需要检查是否有遗漏的功能点,比如os模块的其他功能(如执行系统命令、环境变量),sys模块的版本信息等。确保覆盖主要功能,同时引用正确的参考资料。例如,引用[1]提到os模块的文件和目录操作,引用[2]展示了sys模块的环境路径和编码,引用[3]详细说明了os.path.join的使用。 最后,确保回答结构清晰,分点说明,使用中文,并且每个引用的部分都正确标注来源。同时,生成的相关问题要针对用户可能进一步想了解的内容,比如模块比较、具体函数使用、实际案例等。</think>### Pythonossysos.path模块详解 #### 一、os模块:操作系统交互 功能:执行文件/目录操作、进程管理、环境变量控制等 ```python import os # 创建目录 os.mkdir("new_folder") # 获取当前工作目录 current_dir = os.getcwd() # 返回字符串:/current/path # 执行系统命令 os.system("ls -l") # 在Linux/Mac显示目录内容 # 环境变量操作 print(os.environ["PATH"]) # 输出系统PATH变量 os.environ["MY_VAR"] = "value" # 设置临时环境变量 ``` #### 二、sys模块:解释器交互 功能:访问命令行参数、模块系统、解释器配置等 ```python import sys # 命令行参数处理 print(f"脚本名称:{sys.argv[0]}") # 输出:当前脚本名称 print(f"参数列表:{sys.argv[1:]}") # 输出:附加参数列表 # Python路径管理 sys.path.append("/custom/module/path") # 添加模块搜索路径 # 系统信息获取 print(f"Python版本:{sys.version}") # 输出:3.9.5 (default...) print(f"系统平台:{sys.platform}") # 输出:win32/linux/darwin ``` #### 三、os.path模块:路径处理(属于os模块) 功能:跨平台路径操作,兼容不同操作系统格式 ```python from os import path # 路径拼接(自动处理斜杠) full_path = path.join("dir1", "subdir", "file.txt") # 生成:dir1/subdir/file.txt # 路径解析 dirname = path.dirname("/a/b/c.txt") # 返回:/a/b filename = path.basename("/a/b/c.txt") # 返回:c.txt # 文件检测 exists = path.exists("data.csv") # 返回布尔值 is_file = path.isfile("data.csv") # 判断是否为文件 # 路径标准化 clean_path = path.normpath("dir//sub/../file") # 生成:dir/file ``` #### 四、核心区别对比表 | 模块 | 应用场景 | 典型函数 | |---------|-------------------------------|----------------------------| | os | 文件/目录操作、进程管理 | mkdir, rename, system | | sys | 解释器配置、运行时环境 | argv, exit, modules | | os.path | 路径操作、文件属性检测 | join, exists, splitext | #### 五、联合使用示例 ```python import sys import os from os import path # 获取脚本所在目录 script_dir = path.dirname(path.abspath(sys.argv[0])) # 创建日志目录 log_dir = path.join(script_dir, "logs") if not path.exists(log_dir): os.mkdir(log_dir) # 构造日志路径 log_file = path.join(log_dir, "app.log") with open(log_file, "w") as f: f.write(f"System encoding: {sys.getfilesystemencoding()}") ``` [^1]: Python内置模块文档说明 [^2]: 系统运行时环境获取示例 [^3]: 路径操作最佳实践
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢TS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值