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
osmodule are not available or behave differently. APIs related to processes (e.g.fork(),execve()) and resources (e.g.nice()) 不可用。其它像getuid()andgetpid()are emulated or stubs. WebAssembly platforms also lack support for signals (e.g.kill(),wait()).
注意
此模块中的所有函数会引发
OSError
(或其子类) 若文件名和路径无效或不可访问,或拥有正确类型但不被操作系统所接受的其它自变量。
- os. 名称 ¶
-
操作系统的名称从属模块导入。目前有注册下列名称:
'posix','nt','java'.
文件名、命令行自变量和环境变量 ¶
在 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 作为 文件系统编码 .
-
sys.getfilesystemencoding()返回'utf-8'. -
locale.getpreferredencoding()返回'utf-8'( do_setlocale 自变量不起作用)。 -
sys.stdin,sys.stdout,和sys.stderr都使用 UTF-8 作为它们的文本编码,采用surrogateescape错误处理程序 被启用对于sys.stdinandsys.stdout(sys.stderr继续使用backslashreplace如它在默认区域设置感知模式下所做的) -
在 Unix,
os.device_encoding()返回'utf-8'而不是设备编码。
注意,可以按 UTF-8 模式覆盖标准流设置通过
PYTHONIOENCODING
(就像它们可以在默认区域设置感知模式下)。
因此,改变这些更低级的 API,其它更高级 API 还会显露不同默认行为:
-
使用 UTF-8 编码将命令行自变量,环境变量及文件名解码成文本。
-
os.fsdecode()andos.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. 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()orclear()方法被调用。3.9 版改变: 更新支持 PEP 584 的合并 (
|) 和更新 (|=) 运算符。