os — 杂项操作系统接口

源代码: Lib/os.py


此模块提供使用操作系统从属功能的可移植方式。若仅仅想要读取或写入文件,见 open() ,若想要操纵路径,见 os.path 模块,若想要在命令行中读取所有文件中的所有行,见 fileinput 模块。对于创建临时文件和目录,见 tempfile 模块,对于高级文件和目录处理,见 shutil 模块。

有关这些函数的可用性的注意事项:

  • Python 所有内置操作系统依赖模块的设计是这样的,只要相同功能可用,就使用相同接口;例如,函数 os.stat(path) 返回的统计信息关于 path 按相同格式 (恰好发源于 POSIX 接口)。

  • 特定操作系统的特有扩展也可用透过 os 模块,但使用它们当然威及可移植性。

  • 所有接受路径或文件名两者的函数都接受字节和字符串对象,且结果为相同类型对象若返回路径或文件名。

  • VxWorks 不支持 os.popen、os.fork、os.execv 及 os.spawn*p*。

  • On WebAssembly platforms, Android and iOS, large parts of the os module are not available or behave differently. APIs related to processes (e.g. fork() , execve() ) and resources (e.g. nice() ) 不可用。其它像 getuid() and getpid() are emulated or stubs. WebAssembly platforms also lack support for signals (e.g. kill() , wait() ).

注意

此模块中的所有函数会引发 OSError (或其子类) 若文件名和路径无效或不可访问,或拥有正确类型但不被操作系统所接受的其它自变量。

exception os. error

别名为内置 OSError 异常。

os. 名称

操作系统的名称从属模块导入。目前有注册下列名称: 'posix' , 'nt' , 'java' .

另请参阅

sys.platform 有更细粒度。 os.uname() 给出系统从属版本信息。

The platform 模块提供系统身份的详细校验。

文件名、命令行自变量和环境变量

在 Python 中,文件名、命令行自变量及环境变量都使用字符串类型表示。在某些系统,将它们传递给操作系统之前,有必要解码这些字符串到 (或来自) 字节。Python 使用 文件系统编码和错误处理程序 来履行这种转换 (见 sys.getfilesystemencoding() ).

The 文件系统编码和错误处理程序 的配置是在 Python 启动时通过 PyConfig_Read() 函数:见 filesystem_encoding and filesystem_errors 成员对于 PyConfig .

3.1 版改变: 在某些系统,使用文件系统编码转换可能失败。在这种情况下,Python 使用 surrogateescape (替代转义) 编码错误处理程序 , which means that undecodable bytes are replaced by a Unicode character U+DC xx on decoding, and these are again translated to the original byte on encoding.

The 文件系统编码 必须保证成功解码 128 以下的所有字节。若文件系统编码提供此保证失败,API 函数会引发 UnicodeError .

另请参阅 区域设置编码 .

Python UTF-8 模式

Added in version 3.7: PEP 540 了解更多细节。

Python UTF-8 模式忽略 区域设置编码 并强制使用 UTF-8 编码:

注意,可以按 UTF-8 模式覆盖标准流设置通过 PYTHONIOENCODING (就像它们可以在默认区域设置感知模式下)。

因此,改变这些更低级的 API,其它更高级 API 还会显露不同默认行为:

  • 使用 UTF-8 编码将命令行自变量,环境变量及文件名解码成文本。

  • os.fsdecode() and os.fsencode() 使用 UTF-8 编码。

  • open() , io.open() ,和 codecs.open() 默认使用 UTF-8 编码。不管怎样,它们默认仍使用严格错误处理程序,所以试图以文本模式打开二进制文件可能引发异常而不是产生无感觉数据。

The Python UTF-8 模式 被启用若 LC_CTYPE 区域设置为 C or POSIX 在 Python 启动时 (见 PyConfig_Read() 函数)。

可以启用/禁用它使用 -X utf8 命令行选项和 PYTHONUTF8 环境变量。

PYTHONUTF8 环境变量根本未设置,则解释器默认使用当前区域设置, unless the current locale is identified as a legacy ASCII-based locale (as described for PYTHONCOERCECLOCALE ), and locale coercion is either disabled or fails. In such legacy locales, the interpreter will default to enabling UTF-8 mode unless explicitly instructed not to do so.

Python UTF-8 模式只可以在 Python 启动时启用。它的值可以读取自 sys.flags.utf8_mode .

另请参阅 UTF-8 模式在 Windows 文件系统编码和错误处理程序 .

另请参阅

PEP 686

Python 3.15 将使 Python UTF-8 模式 默认。

进程参数

这些函数和数据项提供信息并运转于当前进程和用户。

os. ctermid ( )

返回进程控制终端对应的文件名。

可用性 :Unix,非 WASI。

os. environ

A 映射 对象的键和值是表示进程环境的字符串。例如, environ['HOME'] 是 Home (主) 目录的路径名 (在某些平台),且相当于 getenv("HOME") 在 C。

捕获此映射,当首次 os 模块被导入时,通常在 Python 启动期间,属于处理 site.py 。在此时间后对环境做出的改变,不会反射在 os.environ , 除了做出的改变是通过修改 os.environ 直接。

此映射可用于修改环境及查询环境。 putenv() 将被自动调用当映射被修改时。

在 Unix,键和值使用 sys.getfilesystemencoding() and 'surrogateescape' 错误处理程序。可以使用 environb 若愿意使用不同的编码。

On Windows, the keys are converted to uppercase. This also applies when getting, setting, or deleting an item. For example, environ['monty'] = 'python' maps the key 'MONTY' to the value 'python' .

注意

调用 putenv() 直接不改变 os.environ ,因此最好修改 os.environ .

注意

在某些平台,包括 FreeBSD 和 macOS,设置 environ 可能导致内存泄漏。参考系统文档编制了解 putenv() .

可以删除此映射中的项以取消环境变量设置。 unsetenv() 会被自动调用当删除项从 os.environ ,和当某一 pop() or clear() 方法被调用。

3.9 版改变: 更新支持 PEP 584 的合并 ( | ) 和更新 ( |= ) 运算符。

os. environb

字节版本的 environ 映射 对象的键/值两者都是 bytes 对象表示进程环境。 environ and environb 是同步的 (修改 environb 更新 environ ,反之亦然)。

environb 才可用,若 supports_bytes_environ is True .

Added in version 3.2.

3.9 版改变: 更新支持 PEP 584 的合并 ( | ) 和更新 ( |= ) 运算符。