# 16.1. `os` — 操作系统的各种接口

源代码： Lib/os.py

这个模快提供了一个便携的方式去使用操作系统的相关功能。如果你只是想要读取或写入文件请参阅 `open()`，如果你想要操作路径，请参阅 `os.path` 模块，如果你想要在命令行上读取所有文件中的所有行，请参阅 `fileinput` 模块。需要创建临时文件和目录，请参阅 `tempfile` 模块。需要高级的文件和目录处理请参见 `shutil` 模块。

注意这些功能的可用性︰

- Python的所有内置操作系统相关模块的设计都是这样的，只要具有相同的功能，它就使用相同的接口；例如，函数`os.stat(path)`以相同的格式返回有关path的统计信息（恰好源于POSIX接口）。
- 通过`os`模块也可以使用特定操作系统特有的扩展，但使用它们当然会对可移植性构成威胁。
- 所有接受路径或文件名的函数接受字节和字符串对象，并且如果返回路径或文件名，则会生成相同类型的对象。
- “可用性：Unix”说明意味着这个函数通常在Unix系统上找到。它没有在特定的操作系统上声称它的存在。
- 如果没有单独说明，那么声称“可用性：Unix”的所有功能都支持在基于Unix核心的Mac OS X上。

注意

在无效或无法访问的文件名和路径或具有正确类型但操作系统不接受的其他参数的情况下，此模块中的所有函数都会引发`OSError`。

exception `os.``error`

  内置 `OSError` 异常的别名.

`os.``name`

  导入的操作系统相关模块的名称。以下名称已被注册：`'posix'`，`'nt'`，`'ce'`，`'java'`

  也可以看看

  `sys.platform`具有更精细的粒度。`os.uname()`给出系统相关的版本信息。

  `platform`模块提供了有关系统身份的详细检查。

## 16.1.1. 文件名称，命令行参数和环境变量

在 Python中 文件名称、 命令行参数和环境变量使用字符串类型来表示。在某些系统上，将它们传递给操作系统之前解码这些字符串并从字节是必要。Python 使用文件系统 编码执行此转换（见 `sys.getfilesystemencoding()`）。

版本 3.1 中的更改︰在某些系统上，使用文件系统编码的转换可能失败。在这种情况下，Python 使用 surrogateescape 编码的错误处理程序，这意味着 undecodable 字节的解码使用 Unicode 字符 U + DCxx替代，和这些都再次在编码中转换为原始字节。

文件系统编码必须保证成功解码 128 以下的所有字节。如果文件系统编码不能提供这种保证，API 函数可能raise UnicodeErrors。

## 16.1.2. 进程参数

这些函数和数据的项目提供当前进程和用户的信息以及操作。

`os.``ctermid`()

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

  可用性：Unix。

`os.``environ`

  表示字符串环境的mapping对象。例如，`environ['HOME']`是主目录（在某些平台上）的路径名，相当于C中的`getenv("HOME")`。

  该映射是在导入`os`模块时首次捕获的，通常在Python启动期间作为处理`site.py`的一部分。除了通过直接修改`os.environ`所做的更改之外，在此时间之后对环境所做的更改不会反映在`os.environ`中。

  如果平台支持`putenv()`函数，则此映射可用于修改环境以及查询环境。`putenv()` will be called automatically when the mapping is modified.

  在Unix上，键和值使用`sys.getfilesystemencoding()`和`'surrogateescape'`错误处理程序。如果您想使用不同的编码，请使用`environb`。

  注意

  直接调用`putenv()`不会改变`os.environ`，所以最好修改`os.environ`。

  注意

  在某些平台上，包括FreeBSD和Mac OS X，设置`environ`可能导致内存泄漏。请参阅`putenv()`的系统文档。

  如果未提供`putenv()`，则可以将此映射的修改副本传递给适当的流程创建功能，以使子流程使用修改后的环境。

  如果平台支持`unsetenv()`函数，则可以删除此映射中的项目以取消设置环境变量。`unsetenv()` will be called automatically when an item is deleted from `os.environ`, and when one of the `pop()` or `clear()` methods is called.

`os.``environb`

  字节版本的`environ`：表示环境为字节字符串的mapping对象。`environ`和`environb`是同步的（修改`environb`更新`environ`，反之亦然）。

  `environb`仅在`supports_bytes_environ`为True时可用。

  版本3.2中的新功能。

`os.``chdir`(path)
`os.``fchdir`(fd)
`os.``getcwd`()

  这些功能在文件和目录中进行了说明。

`os.``fsencode`(filename)

  在Windows上使用`'surrogateescape'`错误处理程序或`'strict'`编码文件名返回`bytes`不变。

  `fsdecode()` is the reverse function.

  版本3.2中的新功能。

`os.``fsdecode`(filename)

  在Windows上使用`'surrogateescape'`错误处理程序或`'strict'`对文件系统进行解码filename返回`str`不变。

  `fsencode()` is the reverse function.

  版本3.2中的新功能。

`os.``getenv`(key, default=None)

  如果它存在，则返回环境变量键的值；如果不存在，则返回默认值。键，默认，结果是str。

  在Unix上，键和值用`sys.getfilesystemencoding()`和`'surrogateescape'`错误处理程序解码。如果您想使用不同的编码，请使用`os.getenvb()`。

  可用性：最受欢迎的Unix，Windows。

`os.``getenvb`(key, default=None)

  如果它存在，则返回环境变量键的值；如果不存在，则返回默认值。键，默认，结果是字节。

  可用性：大多数Unix的口味。

  版本3.2中的新功能。

`os.``get_exec_path`(env=None)

  在启动进程时，返回将搜索命名可执行文件的目录列表，类似于shell。env, when specified, should be an environment variable dictionary to lookup the PATH in. 默认情况下，当env为None时，使用`environ`。

  版本3.2中的新功能。

`os.``getegid`()

  返回当前进程的有效组标识。这对应于当前进程中正在执行的文件上的“set id”位。

  可用性：UNIX。

`os.``geteuid`()

  返回当前进程的有效用户标识。

  可用性：UNIX。

`os.``getgid`()

  返回当前进程的实际组ID。

  可用性：UNIX。

`os.``getgrouplist`(user, group)

  返回user所属的组ID的列表。如果组不在列表中，则包含它；通常，组被指定为user的密码记录中的组ID字段。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``getgroups`()

  返回与当前进程关联的补充组标识的列表。

  可用性：UNIX。

  注意

  在Mac OS X上，`getgroups()`行为与其他Unix平台稍有不同。If the Python interpreter was built with a deployment target of `10.5` or earlier, `getgroups()` returns the list of effective group ids associated with the current user process; this list is limited to a system-defined number of entries, typically 16, and may be modified by calls to `setgroups()` if suitably privileged. 如果使用大于`10.5`的部署目标构建，则`getgroups()`返回与进程的有效用户标识关联的用户的当前组访问列表；组访问列表可能会在进程的整个生命周期中改变，它不会受到对`setgroups()`的调用的影响，并且其长度不限于16。部署目标值`MACOSX_DEPLOYMENT_TARGET`可以通过`sysconfig.get_config_var()`获取。

`os.``getlogin`()

  Return the name of the user logged in on the controlling terminal of the process.For most purposes, it is more useful to use the environment variables `LOGNAME` or `USERNAME` to find out who the user is, or `pwd.getpwuid(os.getuid())[0]` to get the login name of the current real user id.

  可用性：Unix，Windows。

`os.``getpgid`(pid)

  用进程id pid返回进程的进程组ID。如果pid为0，则返回当前进程的进程组标识。

  可用性：UNIX。

`os.``getpgrp`()

  返回当前进程组的ID。

  可用性：UNIX。

`os.``getpid`()

  返回当前进程id。

`os.``getppid`()

  返回父进程的进程ID。当父进程退出时，在Unix上返回的id是init进程（1）之一，在Windows上它仍然是同一个id，它可能已被另一个进程重用。

  可用性：Unix，Windows。

  在版本3.2中更改：增加了对Windows的支持。

`os.``getpriority`(which, who)

  获取计划调度优先级。其中是`PRIO_PROCESS`，`PRIO_PGRP`或`PRIO_USER`，who之一的值（`PRIO_PROCESS`的进程标识符，`PRIO_PGRP`的进程组标识符，以及`PRIO_USER` who表示（分别）调用进程，调用进程的进程组或调用进程的实际用户标识的零值。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``PRIO_PROCESS`
`os.``PRIO_PGRP`
`os.``PRIO_USER`

  `getpriority()`和`setpriority()`函数的参数。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``getresuid`()

  返回一个元组（ruid，euid，suid），表示当前进程的真实，有效和保存的用户id。

  可用性：UNIX。

  版本3.2中的新功能。

`os.``getresgid`()

  返回一个元组（rgid，egid，sgid），表示当前进程的真实，有效和保存的组ID。

  可用性：UNIX。

  版本3.2中的新功能。

`os.``getuid`()

  返回当前进程的真实用户ID。

  可用性：UNIX。

`os.``initgroups`(username, gid)

  调用系统initgroups()初始化组访问列表，其中包含指定用户名所属的所有组以及指定的组ID。

  可用性：UNIX。

  版本3.2中的新功能。

`os.``putenv`(key, value)

  将名为key的环境变量设置为字符串值。Such changes to the environment affect subprocesses started with `os.system()`, `popen()` or `fork()` and `execv()`.

  可用性：最受欢迎的Unix，Windows。

  注意

  在某些平台上，包括FreeBSD和Mac OS X，设置`environ`可能导致内存泄漏。请参阅putenv的系统文档。

  当支持`putenv()`时，`os.environ`中的项目分配会自动转换为对`putenv()`的相应调用。但是，对`putenv()`的调用不会更新`os.environ`，因此实际上最好将其分配给`os.environ`的项目。

`os.``setegid`(egid)

  设置当前进程的有效组ID。

  可用性：UNIX。

`os.``seteuid`(euid)

  设置当前进程的有效用户标识。

  可用性：UNIX。

`os.``setgid`(gid)

  设置当前进程的组ID。

  可用性：UNIX。

`os.``setgroups`(groups)

  将与当前进程关联的补充组标识列表设置为组。组必须是一个序列，并且每个元素必须是标识组的整数。此操作通常仅适用于超级用户。

  可用性：UNIX。

  注意

  在Mac OS X上，组的长度不得超过系统定义的最大有效组标识数，通常为16。有关通过调用setgroups()可能不会返回相同组列表的情况，请参阅`getgroups()`的文档。

`os.``setpgrp`()

  根据所实现的版本，调用系统调用`setpgrp()`或`setpgrp（0， 0）`任何）。有关语义的信息，请参阅Unix手册。

  可用性：UNIX。

`os.``setpgid`(pid, pgrp)

  调用系统调用`setpgid()`将id为pid的进程的进程组id设置为id为pgrp的进程组。有关语义的信息，请参阅Unix手册。

  可用性：UNIX。

`os.``setpriority`(which, who, priority)

  设置节目安排优先级。其中是`PRIO_PROCESS`，`PRIO_PGRP`或`PRIO_USER`，who之一的值（`PRIO_PROCESS`的进程标识符，`PRIO_PGRP`的进程组标识符，以及`PRIO_USER` who表示（分别）调用进程，调用进程的进程组或调用进程的实际用户标识的零值。priority是一个范围在-20到19之间的值。默认优先级是0；低优先级会导致更有利的调度。

  可用性：Unix

  版本3.3中的新功能。

`os.``setregid`(rgid, egid)

  设置当前进程的真实和有效的组ID。

  可用性：UNIX。

`os.``setresgid`(rgid, egid, sgid)

  设置当前进程的真实，有效和保存的组ID。

  可用性：UNIX。

  版本3.2中的新功能。

`os.``setresuid`(ruid, euid, suid)

  设置当前进程的真实，有效和保存的用户标识。

  可用性：UNIX。

  版本3.2中的新功能。

`os.``setreuid`(ruid, euid)

  设置当前进程的真实和有效的用户ID。

  可用性：UNIX。

`os.``getsid`(pid)

  调用系统调用`getsid()`。有关语义的信息，请参阅Unix手册。

  可用性：UNIX。

`os.``setsid`()

  调用系统调用`setsid()`。有关语义的信息，请参阅Unix手册。

  可用性：UNIX。

`os.``setuid`(uid)

  设置当前进程的用户标识。

  可用性：UNIX。

`os.``strerror`(code)

  返回代码中与错误代码对应的错误消息。在给定未知错误号时，在`strerror()`返回`NULL`的平台上，引发`ValueError`。

`os.``supports_bytes_environ`

  `True` `False`在Windows上）。

  版本3.2中的新功能。

`os.``umask`(mask)

  设置当前的数字umask并返回先前的umask。

`os.``uname`()

  返回标识当前操作系统的信息。返回值是一个具有五个属性的对象：

  - `sysname` - 操作系统名称
  - `nodename` - 网络上机器的名称（实施定义）
  - `release` - 操作系统版本
  - `version` - 操作系统版本
  - `machine` - hardware identifier

  For backwards compatibility, this object is also iterable, behaving like a five-tuple containing `sysname`, `nodename`, `release`, `version`, and `machine` in that order.

  某些系统将`nodename`截断为8个字符或导致组件；获取主机名的更好方法是`socket.gethostname()`甚至是`socket.gethostbyaddr(socket.gethostname())`。

  可用性：最近的Unix版本。

  在版本3.3中改变：返回类型从一个元组改变为一个具有命名属性的元组对象。

`os.``unsetenv`(key)

  取消设置（删除）名为键的环境变量。Such changes to the environment affect subprocesses started with `os.system()`, `popen()` or `fork()` and `execv()`.

  当支持`unsetenv()`时，删除`os.environ`中的项目会自动转换为对`unsetenv()`的相应调用。但是，对`unsetenv()`的调用不会更新`os.environ`，因此实际上最好删除`os.environ`的项目。

  可用性：最受欢迎的Unix，Windows。

## 16.1.3. 文件对象创建

此函数创建新的文件对象。（参见`open()`用于打开文件描述符。）

`os.``fdopen`(fd, *args, **kwargs)

  返回连接到文件描述符fd的打开文件对象。这是`open()`内置函数的别名，并接受相同的参数。唯一的区别是，`fdopen()`的第一个参数必须始终为整数。

## 16.1.4. 文件描述符操作

这些函数对使用文件描述符引用的I / O流进行操作。

文件描述符是对应于当前进程打开的文件的小整数。例如，标准输入通常是文件描述符0，标准输出是1，标准错误是2。然后，由进程打开的其他文件将被分配3,4,5等等。名称“文件描述符”有点欺骗性；在Unix平台上，套接字和管道也被文件描述符引用。

必要时，可以使用`fileno()`方法获取与file object关联的文件描述符。Note that using the file descriptor directly will bypass the file object methods, ignoring aspects such as internal buffering of data.

`os.``close`(fd)

  关闭文件描述符fd。

  注意

  此函数用于低级I / O，并且必须应用于由`os.open()`或`pipe()`返回的文件描述符。To close a “file object” returned by the built-in function `open()` or by `popen()` or `fdopen()`, use its `close()` method.

`os.``closerange`(fd_low, fd_high)

  将所有文件描述符从fd_low（包括）关闭到fd_high（不包括），忽略错误。相当于（但快得多）：

      for fd in range(fd_low, fd_high):
          try:
              os.close(fd)
          except OSError:
              pass

`os.``device_encoding`(fd)

  如果连接到终端，则返回描述与fd关联的设备的编码的字符串；否则返回`None`。

`os.``dup`(fd)

  返回文件描述符fd的副本。新的文件描述符是non-inheritable。

  在Windows上，当复制标准流（0：stdin，1：stdout，2：stderr）时，新文件描述符是inheritable。

  在版本3.4中更改：新的文件描述符现在是不可继承的。

`os.``dup2`(fd, fd2, inheritable=True)

  复制文件描述符fd到fd2，必要时关闭后者。默认情况下，文件描述符fd2为inheritable，如果可继承为`False`，则不可继承。

  Changed in version 3.4: Add the optional inheritable parameter.

`os.``fchmod`(fd, mode)

  将由fd给出的文件模式更改为数字模式。有关mode的可能值，请参阅`chmod()`的文档。从Python 3.3开始，这相当于`os.chmod（fd， mode）`。

  可用性：UNIX。

`os.``fchown`(fd, uid, gid)

  将由fd给出的文件的所有者和组标识更改为数字uid和gid。要使其中一个ID保持不变，请将其设置为-1。参见`chown()`。从Python 3.3开始，这相当于`os.chown（fd， uid， gid）`。

  可用性：UNIX。

`os.``fdatasync`(fd)

  用filedescriptor fd强制将文件写入磁盘。不强制更新元数据。

  可用性：UNIX。

  注意

  此功能在MacOS上不可用。

`os.``fpathconf`(fd, name)

  返回与打开文件相关的系统配置信息。name指定要检索的配置值；它可能是一个字符串，它是定义的系统值的名称；这些名称在许多标准（POSIX.1，Unix 95，Unix 98等）中都有详细说明。一些平台也定义了其他名称。主机操作系统已知的名称在`pathconf_names`字典中给出。对于不包含在该映射中的配置变量，也接受传递name的整数。

  如果name是一个字符串且未知，则引发`ValueError`。If a specific value for name is not supported by the host system, even if it is included in `pathconf_names`, an `OSError` is raised with `errno.EINVAL` for the error number.

  从Python 3.3开始，这相当于`os.pathconf（fd， name）`。

  可用性：UNIX。

`os.``fstat`(fd)

  获取文件描述符fd的状态。返回一个`stat_result`对象。

  从Python 3.3开始，这相当于`os.stat(fd)`。

  也可以看看

  `stat()`函数。

`os.``fstatvfs`(fd)

  返回包含与文件描述符fd关联的文件的文件系统的信息，如`statvfs()`。从Python 3.3开始，这相当于`os.statvfs(fd)`。

  可用性：UNIX。

`os.``fsync`(fd)

  用filedescriptor fd强制将文件写入磁盘。在Unix上，这会调用本地的`fsync()`函数；在Windows上，MS `_commit()`函数。

  如果你从缓冲的Python file object f开始，首先执行`f.flush()`，然后执行`os.fsync(f.fileno())`，以确保与f关联的所有内部缓冲区都写入磁盘。

  可用性：Unix，Windows。

`os.``ftruncate`(fd, length)

  截断与文件描述符fd相对应的文件，以便它的大小最多为长度个字节。从Python 3.3开始，这相当于`os.truncate（fd， length）`。

  可用性：Unix，Windows。

  版本3.5中已更改：添加了对Windows的支持

`os.``get_blocking`(fd)

  获取文件描述符的阻塞模式：`False`如果`O_NONBLOCK`标志被设置，`True`如果标志被清除。

  另见`set_blocking()`和`socket.socket.setblocking()`。

  可用性：UNIX。

  版本3.5中的新功能。

`os.``isatty`(fd)

  如果文件描述符fd打开并连接到类似tty（-like）的设备，则返回`True`，否则`False`。

`os.``lockf`(fd, cmd, len)

  在打开的文件描述符上应用，测试或移除POSIX锁。fd是一个打开的文件描述符。cmd指定要使用的命令 - `F_LOCK`，`F_TLOCK`，`F_ULOCK`或`F_TEST` len指定要锁定的文件部分。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``F_LOCK`
`os.``F_TLOCK`
`os.``F_ULOCK`
`os.``F_TEST`

  指定`lockf()`执行什么操作的标志。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``lseek`(fd, pos, how)

  Set the current position of file descriptor fd to position pos, modified by how: `SEEK_SET` or `0` to set the position relative to the beginning of the file; `SEEK_CUR` or `1` to set it relative to the current position; `SEEK_END` or `2` to set it relative to the end of the file. 从头开始，以字节为单位返回新的光标位置。

`os.``SEEK_SET`
`os.``SEEK_CUR`
`os.``SEEK_END`

  `lseek()`函数的参数。它们的值分别为0,1和2。

  版本3.3中的新功能：某些操作系统可能支持其他值，例如`os.SEEK_HOLE`或`os.SEEK_DATA`。

`os.``open`(path, flags, mode=0o777, *, dir_fd=None)

  根据flags打开文件path，并根据mode设置不同的标志。当计算模式时，当前的umask值首先被屏蔽掉。返回新打开的文件的文件描述符。新的文件描述符是non-inheritable。

  有关标志和模式值的说明，请参阅C运行时文档；标志常量（如`O_RDONLY`和`O_WRONLY`）在`os`模块中定义。特别是，在Windows上，需要使用`O_BINARY`以二进制模式打开文件。

  该函数可以使用dir_fd参数支持paths relative to directory descriptors的路径。

  在版本3.4中更改：新的文件描述符现在是不可继承的。

  注意

  此功能适用于低级别的I / O。对于正常使用，使用内置函数`open()`，该函数返回file object，其中`read()`和`write()`方法（还有更多）。要将文件描述符包装到文件对象中，请使用`fdopen()`。

  3.3版本中的新功能： dir_fd参数。

  Changed in version 3.5: If the system call is interrupted and the signal handler does not raise an exception, the function now retries the system call instead of raising an `InterruptedError` exception (see PEP 475 for the rationale).

以下常量是`open()`函数的flags参数的选项。它们可以使用按位或运算符`|`进行组合。其中一些不适用于所有平台。有关它们的可用性和使用情况的描述，请参阅Unix上的open（2）手册页或Windows上的MSDN。

`os.``O_RDONLY`
`os.``O_WRONLY`
`os.``O_RDWR`
`os.``O_APPEND`
`os.``O_CREAT`
`os.``O_EXCL`
`os.``O_TRUNC`

  这些常量在Unix和Windows上可用。

`os.``O_DSYNC`
`os.``O_RSYNC`
`os.``O_SYNC`
`os.``O_NDELAY`
`os.``O_NONBLOCK`
`os.``O_NOCTTY`
`os.``O_SHLOCK`
`os.``O_EXLOCK`
`os.``O_CLOEXEC`

  这些常量仅在Unix上可用。

  在版本3.3中更改：添加`O_CLOEXEC`常量。

`os.``O_BINARY`
`os.``O_NOINHERIT`
`os.``O_SHORT_LIVED`
`os.``O_TEMPORARY`
`os.``O_RANDOM`
`os.``O_SEQUENTIAL`
`os.``O_TEXT`

  这些常量仅在Windows上可用。

`os.``O_ASYNC`
`os.``O_DIRECT`
`os.``O_DIRECTORY`
`os.``O_NOFOLLOW`
`os.``O_NOATIME`
`os.``O_PATH`
`os.``O_TMPFILE`

  这些常量是GNU扩展，如果它们没有被C库定义则不存在。

  Changed in version 3.4: Add `O_PATH` on systems that support it. 添加`O_TMPFILE`，仅适用于Linux Kernel 3.11或更新版本。

`os.``openpty`()

  打开一个新的伪终端对。分别为pty和tty返回一对文件描述符`（master， slave）`。新的文件描述符是non-inheritable。对于（稍微）更便携的方法，请使用`pty`模块。

  可用性：一些Unix的味道。

  在版本3.4中更改：新的文件描述符现在是不可继承的。

`os.``pipe`()

  创建一个管道。分别返回可用于读写的一对文件描述符`（r， w）`。新的文件描述符是non-inheritable。

  可用性：Unix，Windows。

  在版本3.4中更改：新的文件描述符现在是不可继承的。

`os.``pipe2`(flags)

  使用flags自动设置一个管道。flags可以通过OR这些值中的一个或多个来构造：`O_NONBLOCK`，`O_CLOEXEC`。分别返回可用于读写的一对文件描述符`（r， w）`。

  可用性：一些Unix的味道。

  版本3.3中的新功能。

`os.``posix_fallocate`(fd, offset, len)

  确保为fd指定的文件分配足够的磁盘空间，该文件从offset开始并继续处理len字节。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``posix_fadvise`(fd, offset, len, advice)

  宣布打算以特定模式访问数据，从而允许内核进行优化。该建议适用于由fd从offset开始并继续len字节指定的文件区域。advice is one of `POSIX_FADV_NORMAL`, `POSIX_FADV_SEQUENTIAL`, `POSIX_FADV_RANDOM`, `POSIX_FADV_NOREUSE`, `POSIX_FADV_WILLNEED` or `POSIX_FADV_DONTNEED`.

  可用性：UNIX。

  版本3.3中的新功能。

`os.``POSIX_FADV_NORMAL`
`os.``POSIX_FADV_SEQUENTIAL`
`os.``POSIX_FADV_RANDOM`
`os.``POSIX_FADV_NOREUSE`
`os.``POSIX_FADV_WILLNEED`
`os.``POSIX_FADV_DONTNEED`

  可以在`posix_fadvise()`的advice中使用的标志指定可能使用的访问模式。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``pread`(fd, buffersize, offset)

  从文件描述符fd中读取offset位置处的文件描述符。它将读取buffersize字节数。文件偏移保持不变。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``pwrite`(fd, str, offset)

  将bytestring从offset写入文件描述符fd，使文件偏移保持不变。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``read`(fd, n)

  从文件描述符fd中最多读取n个字节。返回包含读取字节的字节串。如果已经到达由fd引用的文件末尾，则返回空字节对象。

  注意

  此函数用于低级I / O，并且必须应用于由`os.open()`或`pipe()`返回的文件描述符。To read a “file object” returned by the built-in function `open()` or by `popen()` or `fdopen()`, or `sys.stdin`, use its `read()` or `readline()` methods.

  Changed in version 3.5: If the system call is interrupted and the signal handler does not raise an exception, the function now retries the system call instead of raising an `InterruptedError` exception (see PEP 475 for the rationale).

`os.``sendfile`(out, in, offset, count)
`os.``sendfile`(out, in, offset, count, [headers, ][trailers, ]flags=0)

  从offset开始，将count字节从中的文件描述符复制到文件描述符out。返回发送的字节数。EOF到达时返回0。

  定义`sendfile()`的所有平台都支持第一个函数表示法。

  On Linux, if offset is given as `None`, the bytes are read from the current position of in and the position of in is updated.

  第二种情况可能在Mac OS X和FreeBSD上使用，其中头和尾>是任意序列的缓冲区，在t2>写入。它返回与第一种情况相同的结果。

  On Mac OS X and FreeBSD, a value of 0 for count specifies to send until the end of in is reached.

  所有平台都支持套接字作为out文件描述符，并且一些平台允许其他类型（例如，普通文件，管道）。

  跨平台应用程序不应该使用头，尾部和标记参数。

  可用性：UNIX。

  注意

  对于`sendfile()`的更高级别包装，请参阅`socket.socket.sendfile()`。

  版本3.3中的新功能。

`os.``set_blocking`(fd, blocking)

  设置指定文件描述符的阻止模式。如果阻塞`False`，则设置`O_NONBLOCK`标志，否则清除该标志。

  另见`get_blocking()`和`socket.socket.setblocking()`。

  可用性：UNIX。

  版本3.5中的新功能。

`os.``SF_NODISKIO`
`os.``SF_MNOWAIT`
`os.``SF_SYNC`

  `sendfile()`函数的参数，如果实现支持它们的话。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``readv`(fd, buffers)

  从文件描述符fd中读入多个可变的bytes-like objects 缓冲区。`readv()` will transfer data into each buffer until it is full and then move on to the next buffer in the sequence to hold the rest of the data. `readv()` returns the total number of bytes read (which may be less than the total capacity of all the objects).

  可用性：UNIX。

  版本3.3中的新功能。

`os.``tcgetpgrp`(fd)

  返回由fd（由`os.open()`返回的打开文件描述符）给出的与终端关联的进程组。

  可用性：UNIX。

`os.``tcsetpgrp`(fd, pg)

  将与由fd（由`os.open()`）返回的打开文件描述符给出的终端关联的进程组设置为pg。

  可用性：UNIX。

`os.``ttyname`(fd)

  返回一个字符串，它指定与文件描述符fd关联的终端设备。如果fd未与终端设备关联，则会引发异常。

  可用性：UNIX。

`os.``write`(fd, str)

  将str中的字节串写入文件描述符fd。返回实际写入的字节数。

  注意

  此函数用于低级I / O，并且必须应用于由`os.open()`或`pipe()`返回的文件描述符。To write a “file object” returned by the built-in function `open()` or by `popen()` or `fdopen()`, or `sys.stdout` or `sys.stderr`, use its `write()` method.

  Changed in version 3.5: If the system call is interrupted and the signal handler does not raise an exception, the function now retries the system call instead of raising an `InterruptedError` exception (see PEP 475 for the rationale).

`os.``writev`(fd, buffers)

  将buffers的内容写入文件描述符fd。buffers必须是bytes-like objects的序列。缓冲区按阵列顺序处理。第一个缓冲区的全部内容在进入第二个之前写入，依此类推。操作系统可以对可以使用的缓冲区数量设置限制（sysconf()值SC_IOV_MAX）。

  `writev()` writes the contents of each object to the file descriptor and returns the total number of bytes written.

  可用性：UNIX。

  版本3.3中的新功能。

### 16.1.4.1. 查询终端的大小

版本3.3中的新功能。

`os.``get_terminal_size`(fd=STDOUT_FILENO)

  以`（列， 行）`，`terminal_size`类型的元组的形式返回终端窗口的大小。

  可选参数`fd`（默认`STDOUT_FILENO`或标准输出）指定应查询哪个文件描述符。

  如果文件描述符未连接到终端，则引发`OSError`。

  `shutil.get_terminal_size()` is the high-level function which should normally be used, `os.get_terminal_size` is the low-level implementation.

  可用性：Unix，Windows。

class `os.``terminal_size`

  元组的子类，保存终端窗口大小的`（列， 行）`。

  `columns`

    终端窗口的宽度，以字符为单位。

  `lines`

    终端窗口的高度，以字符表示。

### 16.1.4.2. 文件描述符的继承

版本3.4中的新功能。

文件描述符具有“可继承”标志，该标志指示文件描述符是否可以被子进程继承。从Python 3.4开始，由Python创建的文件描述符在默认情况下是非可继承的。

在UNIX上，执行新程序时，子进程中的非可继承文件描述符被关闭，其他文件描述符被继承。

在Windows上，除了标准流（文件描述符0,1和2：stdin，stdout和stderr）外，子进程中的非可继承句柄和文件描述符都是关闭的，它们始终是继承的。使用`spawn*`函数，所有可继承的句柄和所有可继承的文件描述符都被继承。使用`subprocess`模块，除标准流以外的所有文件描述符都会关闭，并且只有在close_fds参数为`False`时才继承可继承的句柄。

`os.``get_inheritable`(fd)

  获取指定文件描述符的“可继承”标志（布尔值）。

`os.``set_inheritable`(fd, inheritable)

  设置指定文件描述符的“可继承”标志。

`os.``get_handle_inheritable`(handle)

  获取指定句柄的“可继承”标志（布尔值）。

  可用性：Windows。

`os.``set_handle_inheritable`(handle, inheritable)

  设置指定句柄的“可继承”标志。

  可用性：Windows。

## 16.1.5. 文件和目录

在一些Unix平台上，许多这些功能都支持以下一个或多个功能：

- 指定文件描述符：对于某些函数，path参数不仅可以是一个给出路径名的字符串，也可以是一个文件描述符。然后该函数将对描述符引用的文件进行操作。（对于POSIX系统，Python将调用该函数的`f...`版本。）

  您可以使用`os.supports_fd`检查path是否可以在您的平台上指定为文件描述符。如果不可用，使用它将引发一个`NotImplementedError`。

  如果该函数还支持dir_fd或follow_symlinks参数，则在将path作为文件描述符时指定其中的一个是错误的。

- 相对于目录描述符的路径：如果dir_fd不是`None`，它应该是一个指向目录的文件描述符，以及要操作的路径应该是相对的；路径将是相对于该目录。如果路径是绝对路径，则忽略dir_fd。（对于POSIX系统，Python将在函数的版本处调用`...at`或`f...at`

  您可以使用`os.supports_dir_fd`检查您的平台上是否支持dir_fd。如果不可用，使用它将引发一个`NotImplementedError`。

- 不遵循符号链接：如果follow_symlinks为`False`，并且要操作的路径的最后一个元素是符号链接，则该函数将在符号链接本身，而不是链接指向的文件。（对于POSIX系统，Python将调用该函数的`l...`版本。）

  您可以使用`os.supports_follow_symlinks`检查您的平台是否支持follow_symlinks。如果不可用，使用它将引发一个`NotImplementedError`。

`os.``access`(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)

  使用real uid / gid来测试对路径的访问。请注意，大多数操作将使用有效的uid / gid，因此可以在suid / sgid环境中使用此例程来测试调用用户是否具有对路径的指定访问权限。mode should be `F_OK` to test the existence of path, or it can be the inclusive OR of one or more of `R_OK`, `W_OK`, and `X_OK` to test permissions. 如果允许访问，则返回`True`，否则返回`False`。有关更多信息，请参阅Unix手册页access（2）。

  该函数可以支持指定paths relative to directory descriptors和not following symlinks的路径。

  If effective_ids is `True`, `access()` will perform its access checks using the effective uid/gid instead of the real uid/gid. 您的平台可能不支持effective_ids；你可以使用`os.supports_effective_ids`检查它是否可用。如果不可用，使用它将引发一个`NotImplementedError`。

  注意

  使用`access()`检查用户是否有权例如在使用`open()`创建安全漏洞之前打开一个文件，因为用户可能会利用检查和打开文件之间的短时间间隔来操作它。最好使用EAFP技术。例如：

      if os.access("myfile", os.R_OK):
          with open("myfile") as fp:
              return fp.read()
      return "some default data"

  写得更好：

      try:
          fp = open("myfile")
      except PermissionError:
          return "some default data"
      else:
          with fp:
              return fp.read()

  注意

  即使`access()`表明它们会成功，I / O操作可能会失败，特别是对于可能具有超出通常POSIX权限位模型的权限语义的网络文件系统上的操作。

  在版本3.3中更改：添加了dir_fd，effective_ids和follow_symlinks参数。

`os.``F_OK`
`os.``R_OK`
`os.``W_OK`
`os.``X_OK`

  作为`access()`的mode参数传递的值分别用于测试path的存在性，可读性，可写性和可执行性。

`os.``chdir`(path)

  将当前工作目录更改为路径。

  该函数可以支持specifying a file descriptor。描述符必须引用打开的目录，而不是打开的文件。

  3.3版新增功能：增加了在某些平台上将路径指定为文件描述符的支持。

`os.``chflags`(path, flags, *, follow_symlinks=True)

  将路径的标志设置为数字标志。flags可以采用以下值（按照`stat`模块中的定义）的组合（按位或）：

  - `stat.UF_NODUMP`
  - `stat.UF_IMMUTABLE`
  - `stat.UF_APPEND`
  - `stat.UF_OPAQUE`
  - `stat.UF_NOUNLINK`
  - `stat.UF_COMPRESSED`
  - `stat.UF_HIDDEN`
  - `stat.SF_ARCHIVED`
  - `stat.SF_IMMUTABLE`
  - `stat.SF_APPEND`
  - `stat.SF_NOUNLINK`
  - `stat.SF_SNAPSHOT`

  该功能可以支持not following symlinks。

  可用性：UNIX。

  版本3.3新增： follow_symlinks参数。

`os.``chmod`(path, mode, *, dir_fd=None, follow_symlinks=True)

  将路径的模式更改为数字模式。mode可以采用以下值之一（如`stat`模块中定义的）或它们的按位或运算组合：

  - `stat.S_ISUID`
  - `stat.S_ISGID`
  - `stat.S_ENFMT`
  - `stat.S_ISVTX`
  - `stat.S_IREAD`
  - `stat.S_IWRITE`
  - `stat.S_IEXEC`
  - `stat.S_IRWXU`
  - `stat.S_IRUSR`
  - `stat.S_IWUSR`
  - `stat.S_IXUSR`
  - `stat.S_IRWXG`
  - `stat.S_IRGRP`
  - `stat.S_IWGRP`
  - `stat.S_IXGRP`
  - `stat.S_IRWXO`
  - `stat.S_IROTH`
  - `stat.S_IWOTH`
  - `stat.S_IXOTH`

  该函数可以支持specifying a file descriptor，paths relative to directory descriptors的路径和not following symlinks的路径。

  注意

  尽管Windows支持`chmod()`，但您只能使用它设置文件的只读标志（通过`stat.S_IWRITE`和`stat.S_IREAD`常量或相应的整数值）。所有其他位都被忽略。

  版本3.3新增：新增了对指定path作为开放文件描述符，以及dir_fd和follow_symlinks参数的支持。

`os.``chown`(path, uid, gid, *, dir_fd=None, follow_symlinks=True)

  将path的所有者和组标识更改为数字uid和gid。要使其中一个ID保持不变，请将其设置为-1。

  该函数可以支持specifying a file descriptor，paths relative to directory descriptors的路径和not following symlinks的路径。

  请参阅`shutil.chown()`以获取除数字ID之外还接受名称的更高级别函数。

  可用性：UNIX。

  3.3版新增：新增支持为路径和dir_fd和follow_symlinks参数指定打开的文件描述符。

`os.``chroot`(path)

  将当前进程的根目录更改为路径。

  可用性：UNIX。

`os.``fchdir`(fd)

  将当前工作目录更改为由文件描述符fd表示的目录。描述符必须引用打开的目录，而不是打开的文件。从Python 3.3开始，这相当于`os.chdir(fd)`。

  可用性：UNIX。

`os.``getcwd`()

  返回表示当前工作目录的字符串。

`os.``getcwdb`()

  返回表示当前工作目录的字符串。

`os.``lchflags`(path, flags)

  将path的标志设置为数字标志，如`chflags()`，但不要遵循符号链接。从Python 3.3开始，这相当于`os.chflags（path， flags， follow_symlinks = False）`。

  可用性：UNIX。

`os.``lchmod`(path, mode)

  将路径的模式更改为数字模式。如果path是符号链接，则会影响符号链接而不是目标。有关mode的可能值，请参阅`chmod()`的文档。从Python 3.3开始，这相当于`os.chmod（path， mode， follow_symlinks = False）`。

  可用性：UNIX。

`os.``lchown`(path, uid, gid)

  将path的所有者和组标识更改为数字uid和gid。此功能不会遵循符号链接。从Python 3.3开始，这相当于`os.chown（path， uid， gid， follow_symlinks = False） T4> T0>。`

  可用性：UNIX。

`os.``link`(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)

  Create a hard link pointing to src named dst.

  该函数可以支持指定src_dir_fd和/或dst_dir_fd来提供paths relative to directory descriptors的路径，not following symlinks 。

  可用性：Unix，Windows。

  在版本3.2中更改：添加了Windows支持。

  版本3.3新增：添加了src_dir_fd，dst_dir_fd和follow_symlinks个参数。

`os.``listdir`(path='.')

  返回一个list，包含给定path 目录下所有条目的名字。该list是任意顺序，不包括特殊条目`'.'`以及`'..'`，即使它们存在于目录中。

  path可以是`str`类型或`bytes`类型。如果path的类型为`bytes`，则返回的文件名也将为`bytes`类型；否则，它们的类型为`str`。

  此函数还可以支持指定一个文件描述器（file descriptor）；该文件描述器必须引用一个目录。

  注意

  要将`str`文件名编码为`bytes`，请使用`fsencode()`。

  也可以看看

  `scandir()`函数返回目录条目以及文件属性信息，为许多常见用例提供更好的性能。

  在版本3.2中更改： 路径参数变为可选。

  版本3.3新增：增加了为路径指定打开的文件描述符的支持。

`os.``lstat`(path, *, dir_fd=None)

  在给定路径上执行与`lstat()`系统调用等价的操作。类似于`stat()`，但不符合符号链接。返回一个`stat_result`对象。

  在不支持符号链接的平台上，这是`stat()`的别名。

  从Python 3.3开始，这相当于`os.stat（path， dir_fd = dir_fd， follow_symlinks = False） t0 >。`

  该函数还可以支持paths relative to directory descriptors。

  也可以看看

  `stat()`函数。

  在版本3.2中更改：添加了对Windows 6.0（Vista）符号链接的支持。

  在版本3.3中更改：添加了dir_fd参数。

`os.``mkdir`(path, mode=0o777, *, dir_fd=None)

  创建一个名称为path的目录，模式为mode。

  如果该目录已经存在，则引发`FileExistsError`。

  在模型系统上，mode会被忽略。在使用它的地方，当前的umask值首先被屏蔽掉。如果除了最后9位（即，mode的八进制表示的最后3位）被设置，它们的含义是平台相关的。在某些平台上，它们被忽略，你应该明确地调用`chmod()`来设置它们。

  该函数还可以支持paths relative to directory descriptors。

  也可以创建临时目录；请参阅`tempfile`模块的`tempfile.mkdtemp()`函数。

  3.3版本中的新功能： dir_fd参数。

`os.``makedirs`(name, mode=0o777, exist_ok=False)

  递归创建目录的函数。类似`mkdir()`，但是会生成所有中间目录以及叶子目录。

  mode参数将传递到`mkdir()`；关于它的解释，请参阅mkdir()的描述。

  如果exists_ok为`False`（默认值），则如果目标目录已存在，则会引发`OSError`。

  注意

  如果要创建的路径元素包含`pardir`，`makedirs()`将变得混乱（例如，UNIX系统上的“..”）。

  此函数可以正确处理UNC路径。

  版本3.2中的新功能： exist_ok参数。

  版本3.4.1中的变化：在Python 3.4.1之前，如果exists_ok为`True`并且目录已经存在，如果mode与现有目录的模式不匹配`makedirs()`仍然会引发错误。由于这种行为不可能安全地实现，所以它在Python 3.4.1中被删除。参见问题21082。

`os.``mkfifo`(path, mode=0o666, *, dir_fd=None)

  使用数字模式模式创建名为path的FIFO（命名管道）。首先将当前的umask值从模式中屏蔽掉。

  该函数还可以支持paths relative to directory descriptors。

  FIFO是可以像普通文件一样访问的管道。FIFO存在直到它们被删除（例如`os.unlink()`）。通常，FIFO被用作“客户端”和“服务器”类型进程之间的交会点：服务器打开FIFO进行读取，客户端打开它进行写入。请注意，`mkfifo()`不会打开FIFO - 它只是创建集合点。

  可用性：UNIX。

  3.3版本中的新功能： dir_fd参数。

`os.``mknod`(path, mode=0o600, device=0, *, dir_fd=None)

  创建一个名为path的文件系统节点（文件，设备专用文件或命名管道）。mode specifies both the permissions to use and the type of node to be created, being combined (bitwise OR) with one of `stat.S_IFREG`, `stat.S_IFCHR`, `stat.S_IFBLK`, and `stat.S_IFIFO` (those constants are available in `stat`). 对于`stat.S_IFCHR`和`stat.S_IFBLK`，设备定义新创建的设备专用文件（可能使用`os.makedev()`

  该函数还可以支持paths relative to directory descriptors。

  3.3版本中的新功能： dir_fd参数。

`os.``major`(device)

  从原始设备编号（通常是`stat`中的`st_dev`或`st_rdev`字段）中提取设备主编号。

`os.``minor`(device)

  从原始设备编号（通常是`stat`中的`st_dev`或`st_rdev`字段）中提取设备次要编号。

`os.``makedev`(major, minor)

  从主要和次要设备编号构成原始设备编号。

`os.``pathconf`(path, name)

  返回与指定文件相关的系统配置信息。name指定要检索的配置值；它可能是一个字符串，它是定义的系统值的名称；这些名称在许多标准（POSIX.1，Unix 95，Unix 98等）中都有详细说明。一些平台也定义了其他名称。主机操作系统已知的名称在`pathconf_names`字典中给出。对于不包含在该映射中的配置变量，也接受传递name的整数。

  如果name是一个字符串且未知，则引发`ValueError`。If a specific value for name is not supported by the host system, even if it is included in `pathconf_names`, an `OSError` is raised with `errno.EINVAL` for the error number.

  该函数可以支持specifying a file descriptor。

  可用性：UNIX。

`os.``pathconf_names`

  将由`pathconf()`和`fpathconf()`接受的字典映射名称转换为主机操作系统为这些名称定义的整数值。这可以用来确定系统已知的一组名称。

  可用性：UNIX。

`os.``readlink`(path, *, dir_fd=None)

  返回表示符号链接指向的路径的字符串。The result may be either an absolute or relative pathname; if it is relative, it may be converted to an absolute pathname using `os.path.join(os.path.dirname(path), result)`.

  如果路径是一个字符串对象，则结果也将是一个字符串对象，并且该调用可能会引发UnicodeDecodeError。如果路径是一个字节对象，则结果将是一个字节对象。

  该函数还可以支持paths relative to directory descriptors。

  可用性：Unix，Windows

  在版本3.2中更改：添加了对Windows 6.0（Vista）符号链接的支持。

  3.3版本中的新功能： dir_fd参数。

`os.``remove`(path, *, dir_fd=None)

  删除（删除）文件路径。如果path是目录，则引发`OSError`。使用`rmdir()`删除目录。

  该函数可以支持paths relative to directory descriptors的路径。

  在Windows上，尝试删除正在使用的文件会导致引发异常；在Unix上，目录条目被删除，但分配给该文件的存储不可用，直到原始文件不再被使用。

  这个函数在语义上与`unlink()`相同。

  3.3版本中的新功能： dir_fd参数。

`os.``removedirs`(name)

  递归地删除目录。Works like `rmdir()` except that, if the leaf directory is successfully removed, `removedirs()` tries to successively remove every parent directory mentioned in path until an error is raised (which is ignored, because it generally means that a parent directory is not empty). 例如，`os.removedirs('foo/bar/baz')`将首先删除目录`'foo/bar/baz'`，然后删除`'foo/bar'`和`'foo'`，如果它们是空的。如果无法成功删除叶子目录，则引发`OSError`。

`os.``rename`(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

  将文件或目录src重命名为dst。如果dst是目录，则会引发`OSError`。在Unix上，如果dst存在并且是一个文件，如果用户有权限，它将以静默方式替换。如果src和dst位于不同的文件系统上，则操作可能会在某些Unix版本中失败。如果成功，该重命名将是一个原子操作（这是POSIX 的要求）。在Windows中，如果dst已经存在，即使它是一个文件，也会引发`OSError`。

  该函数可以支持指定src_dir_fd和/或dst_dir_fd来提供相对于目录描述符的paths relative to directory descriptors

  如果您想要跨目标覆盖目标，请使用`replace()`。

  版本3.3新增： src_dir_fd和dst_dir_fd参数。

`os.``renames`(old, new)

  重命名函数递归处理目录或文件，像`rename()`一样工作，除了首先尝试创建新路径名所需的任何中间目录之外。重命名后，使用`removedirs()`删除与旧名称的最右边路径段相对应的目录。

  注意

  如果您缺少删除叶子目录或文件所需的权限，则此功能可能会失败，并生成新的目录结构。

`os.``replace`(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

  将文件或目录src重命名为dst。如果dst是目录，则会引发`OSError`。如果dst存在并且是文件，则在用户具有权限时将被替换为无提示。如果src和dst位于不同的文件系统上，操作可能会失败。如果成功，该重命名将是一个原子操作（这是POSIX 的要求）。

  该函数可以支持指定src_dir_fd和/或dst_dir_fd来提供相对于目录描述符的paths relative to directory descriptors

  版本3.3中的新功能。

`os.``rmdir`(path, *, dir_fd=None)

  删除（删除）目录路径。仅当目录为空时才起作用，否则引发`OSError`。为了移除整个目录树，可以使用`shutil.rmtree()`。

  该函数可以支持paths relative to directory descriptors的路径。

  版本3.3新增： dir_fd参数。

`os.``scandir`(path='.')

  返回与path给出的目录条目对应的`DirEntry`对象的迭代器。这些条目以任意顺序产生，特殊条目`'.'`和`'..'`不包括在内。

  因为`DirEntry`对象，使用`scandir()`而不是`listdir()`可以显着提高代码的性能，该代码还需要文件类型或文件属性信息如果操作系统在扫描目录时提供此信息，则会公开这些信息。All `DirEntry` methods may perform a system call, but `is_dir()` and `is_file()` usually only require a system call for symbolic links; `DirEntry.stat()` always requires a system call on Unix but only requires one for symbolic links on Windows.

  在Unix上，path可以是`str`或`bytes`（使用`fsencode()`和`fsdecode()`来对`bytes`路径进行编码和解码）。在Windows上，path必须是`str`类型。在两个系统上，每个`DirEntry`的`name`和`path`属性的类型将与路径 t9 >。

  以下示例显示了使用`scandir()`显示给定路径中不以`'.'`开头。`entry.is_file()`调用通常不会进行额外的系统调用：

      for entry in os.scandir(path):
         if not entry.name.startswith('.') and entry.is_file():
             print(entry.name)

  注意

  在基于Unix的系统上，`scandir()`使用系统的opendir()和readdir()函数。在Windows上，它使用Win32 FindFirstFileW和FindNextFileW函数。

  版本3.5中的新功能。

class `os.``DirEntry`

  由`scandir()`生成的对象，以公开目录条目的文件路径和其他文件属性。

  `scandir()` will provide as much of this information as possible without making additional system calls. When a `stat()` or `lstat()` system call is made, the `DirEntry` object will cache the result.

  `DirEntry` instances are not intended to be stored in long-lived data structures; if you know the file metadata has changed or if a long time has elapsed since calling `scandir()`, call `os.stat(entry.path)` to fetch up-to-date information.

  因为`DirEntry`方法可以进行操作系统调用，所以它们也可能会引发`OSError`。如果您需要对错误进行非常细致的控制，则可以在调用其中一个`DirEntry`方法时适当地捕获`OSError`并进行处理。

  `DirEntry`实例上的属性和方法如下所示：

  `name`

    条目的基本文件名，相对于`scandir()` 路径参数。

    `name`属性与`scandir()` 属性的类型相同（`str`或`bytes`路径参数。使用`fsdecode()`来解码字节文件名。

  `path`

    The entry’s full path name: equivalent to `os.path.join(scandir_path, entry.name)` where scandir_path is the `scandir()` path argument. 如果`scandir()` 路径参数是绝对路径，则路径是绝对路径。

    `path`属性与`scandir()` 属性的类型相同（`str`或`bytes`路径参数。使用`fsdecode()`来解码字节文件名。

  `inode`()

    返回条目的inode号码。

    结果缓存在`DirEntry`对象上。使用`os.stat（entry.path， follow_symlinks = False）.st_ino`来获取最新信息。

    在第一个未缓存的调用中，系统调用在Windows上需要，而在Unix上不需要。

  `is_dir`(*, follow_symlinks=True)

    如果此条目是指向目录的目录或符号链接，则返回`True`如果条目是或指向任何其他类型的文件，或者它不再存在，则返回`False`。

    如果follow_symlinks为`False`，则仅当该条目是目录（没有符号链接时）才返回`True`；如果条目是任何其他类型的文件或者它不再存在，则返回`False`。

    结果缓存在`DirEntry`对象上，其中有一个用于follow_symlinks `True`和`False`的单独缓存。与`stat.S_ISDIR()`一起调用`os.stat()`以获取最新信息。

    在第一个未缓存的呼叫中，大多数情况下不需要系统调用。具体而言，对于非符号链接，Windows或Unix都不需要系统调用，除了某些Unix文件系统（例如网络文件系统），它们返回`dirent.d_type == < / t2> DT_UNKNOWN`。如果条目是符号链接，则除非follow_symlinks为`False`，否则系统调用将需要遵循符号链接。

    This method can raise `OSError`, such as `PermissionError`, but `FileNotFoundError` is caught and not raised.

  `is_file`(*, follow_symlinks=True)

    如果此条目是指向文件的文件或符号链接，则返回`True`；如果条目是或指向一个目录或其他非文件条目，或者它不再存在，则返回`False`。

    如果follow_symlinks为`False`，则仅当该条目是文件（不符合链接）时返回`True`。如果条目是目录或其他非文件条目，或者它不再存在，则返回`False`。

    结果缓存在`DirEntry`对象上。缓存，系统调用以及引发的异常均按照`is_dir()`进行。

  `is_symlink`()

    如果这个条目是一个符号链接（即使破坏），则返回`True`；如果条目指向一个目录或任何类型的文件，或者它不再存在，则返回`False`。

    结果缓存在`DirEntry`对象上。调用`os.path.islink()`以获取最新信息。

    在第一个未缓存的呼叫中，大多数情况下不需要系统调用。具体而言，Windows或Unix都不需要系统调用，除了某些Unix文件系统（例如网络文件系统），它们返回`dirent.d_type == DT_UNKNOWN T3> T0>。`

    This method can raise `OSError`, such as `PermissionError`, but `FileNotFoundError` is caught and not raised.

  `stat`(*, follow_symlinks=True)

    为此条目返回一个`stat_result`对象。该方法默认遵循符号链接；要统计符号链接，请添加`follow_symlinks=False`参数。

    在Unix上，这个方法总是需要一个系统调用。在Windows上，如果follow_symlinks为`True`，并且条目是符号链接，则它只需要系统调用。

    在Windows上，`stat_result`的`st_ino`，`st_dev`和`st_nlink`属性始终设置为零。调用`os.stat()`以获取这些属性。

    结果缓存在`DirEntry`对象上，其中有一个用于follow_symlinks `True`和`False`的单独缓存。调用`os.stat()`来获取最新信息。

  请注意，`DirEntry`和`pathlib.Path`的几个属性和方法之间存在很好的对应关系。In particular, the `name` attribute has the same meaning, as do the `is_dir()`, `is_file()`, `is_symlink()` and `stat()` methods.

  版本3.5中的新功能。

`os.``stat`(path, *, dir_fd=None, follow_symlinks=True)

  获取文件或文件描述符的状态。在给定的路径上执行相同的`stat()`系统调用。path可以被指定为一个字符串或一个打开的文件描述符。返回一个`stat_result`对象。

  这个函数通常遵循符号链接；统计符号链接添加参数`follow_symlinks=False`，或使用`lstat()`。

  此函数可以支持specifying a file descriptor和not following symlinks。

  例：

      >>> import os
      >>> statinfo = os.stat('somefile.txt')
      >>> statinfo
      os.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026,
      st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295,
      st_mtime=1297230027, st_ctime=1297230027)
      >>> statinfo.st_size
      264

  也可以看看

  `fstat()`和`lstat()`函数。

  3.3版新增：添加了dir_fd和follow_symlinks参数，指定了文件描述符而不是路径。

class `os.``stat_result`

  对象的属性大致对应于`stat`结构的成员。它用于`os.stat()`，`os.fstat()`和`os.lstat()`的结果。

  属性：

  `st_mode`

    文件模式：文件类型和文件模式位（权限）。

  `st_ino`

    inode 节点号。

  `st_dev`

    该文件所在设备的标识符。

  `st_nlink`

    硬链接的数量。

  `st_uid`

    文件所有者的用户标识符。

  `st_gid`

    文件所有者的组标识符。

  `st_size`

    文件大小（以字节为单位），如果是常规文件或符号链接。符号链接的大小是它所包含的路径名的长度，而不是终止的空字节。

  时间戳：

  `st_atime`

    最近访问的时间以秒表示。

  `st_mtime`

    最近的内容修改时间以秒表示。

  `st_ctime`

    取决于平台：

    - Unix上最新的元数据更改时间，
    - 在Windows上创建的时间，以秒表示。
  `st_atime_ns`

    最近访问的时间以纳秒表示，以整数表示。

  `st_mtime_ns`

    最新内容修改的时间以纳秒表示，以整数表示。

  `st_ctime_ns`

    取决于平台：

    - Unix上最新的元数据更改时间，
    - 在Windows上创建的时间，以纳秒为单位表示为整数。

  另请参阅`stat_float_times()`函数。

  注意

  `st_atime`，`st_mtime`和`st_ctime`属性的确切含义和解析度取决于操作系统和文件系统。例如，在使用FAT或FAT32文件系统的Windows系统上，`st_mtime`具有2秒的分辨率，`st_atime`仅具有1天的分辨率。详细信息请参阅您的操作系统文档。

  Similarly, although `st_atime_ns`, `st_mtime_ns`, and `st_ctime_ns` are always expressed in nanoseconds, many systems do not provide nanosecond precision. 在提供纳秒级精度的系统上，用于存储`st_atime`，`st_mtime`和`st_ctime`的浮点对象无法保留所有内容，因为这样稍微不准确。如果您需要准确的时间戳，则应始终使用`st_atime_ns`，`st_mtime_ns`和`st_ctime_ns`。

  在某些Unix系统（如Linux）上，以下属性也可能可用：

  `st_blocks`

    为文件分配的512字节块的数量。当文件有空洞时，这可能小于`st_size` / 512。

  `st_blksize`

    对于高效的文件系统I / O，“首选”块大小。以较小的块写入文件可能会导致低效的读取 - 修改 - 重写。

  `st_rdev`

    设备的类型，如果是inode设备。

  `st_flags`

    用户定义的文件标志。

  在其他Unix系统上（例如FreeBSD），下列属性可能是可用的（但只有在root尝试使用时才可以填写）：

  `st_gen`

    文件生成号码。

  `st_birthtime`

    文件创建时间。

  在Mac OS系统上，以下属性也可能可用：

  `st_rsize`

    文件的实际大小。

  `st_creator`

    文件的创建者。

  `st_type`

    文件类型。

  在Windows系统上，以下属性也可用：

  `st_file_attributes`

    Windows文件属性：由`GetFileInformationByHandle()`返回的`BY_HANDLE_FILE_INFORMATION`结构的`dwFileAttributes`成员。请参阅`stat`模块中的`FILE_ATTRIBUTE_*`常量。

  标准模块`stat`定义了用于从`stat`结构中提取信息的函数和常量。（在Windows上，有些项目填充虚拟值。）

  For backward compatibility, a `stat_result` instance is also accessible as a tuple of at least 10 integers giving the most important (and portable) members of the `stat` structure, in the order `st_mode`, `st_ino`, `st_dev`, `st_nlink`, `st_uid`, `st_gid`, `st_size`, `st_atime`, `st_mtime`, `st_ctime`. 一些实现可能会在最后添加更多项目。为了与旧Python版本兼容，访问`stat_result`作为元组总是返回整数。

  版本3.3新增：添加了`st_atime_ns`，`st_mtime_ns`和`st_ctime_ns`个成员。

  版本3.5中的新功能在Windows上添加了`st_file_attributes`成员。

`os.``stat_float_times`([newvalue])

  确定`stat_result`是否将时间戳记表示为浮动对象。如果newvalue为`True`，未来对`stat()`的调用将返回float，如果`False`，将来调用返回整数。如果newvalue被省略，则返回当前设置。

  为了与旧Python版本兼容，访问`stat_result`作为元组总是返回整数。

  Python现在默认返回浮点值。无法正确使用浮点时间戳的应用程序可以使用此功能来恢复旧的行为。

  时间戳的分辨率（即可能的最小分数）取决于系统。有些系统仅支持第二种解决方案在这些系统上，分数将始终为零。

  建议此设置仅在程序启动时在__ main __模块中更改；图书馆不应该改变这个设置。如果应用程序使用工作不正确的库（如果处理了浮点时间戳记），则此应用程序应关闭此功能，直到库更正为止。

  自版本3.3起已弃用。

`os.``statvfs`(path)

  在给定路径上执行`statvfs()`系统调用。The return value is an object whose attributes describe the filesystem on the given path, and correspond to the members of the `statvfs` structure, namely: `f_bsize`, `f_frsize`, `f_blocks`, `f_bfree`, `f_bavail`, `f_files`, `f_ffree`, `f_favail`, `f_flag`, `f_namemax`.

  为`f_flag`属性的位标记定义了两个模块级常量：如果设置了`ST_RDONLY`，文件系统以只读方式挂载，并且`ST_NOSUID`

  额外的模块级常量是为基于GNU / glibc的系统定义的。These are `ST_NODEV` (disallow access to device special files), `ST_NOEXEC` (disallow program execution), `ST_SYNCHRONOUS` (writes are synced at once), `ST_MANDLOCK` (allow mandatory locks on an FS), `ST_WRITE` (write on file/directory/symlink), `ST_APPEND` (append-only file), `ST_IMMUTABLE` (immutable file), `ST_NOATIME` (do not update access times), `ST_NODIRATIME` (do not update directory access times), `ST_RELATIME` (update atime relative to mtime/ctime).

  该函数可以支持specifying a file descriptor。

  在版本3.2中更改：添加了`ST_RDONLY`和`ST_NOSUID`常量。

  Changed in version 3.4: The `ST_NODEV`, `ST_NOEXEC`, `ST_SYNCHRONOUS`, `ST_MANDLOCK`, `ST_WRITE`, `ST_APPEND`, `ST_IMMUTABLE`, `ST_NOATIME`, `ST_NODIRATIME`, and `ST_RELATIME` constants were added.

  可用性：UNIX。

  版本3.3新增：增加了为路径指定打开的文件描述符的支持。

`os.``supports_dir_fd`

  `Set`对象指示`os`模块中的哪些函数允许使用它们的dir_fd参数。不同的平台提供不同的功能，并且可能在另一个平台上工作的选项可能不受支持。为了保持一致性，支持dir_fd的函数总是允许指定参数，但如果功能实际上不可用，则会引发异常。

  要检查特定函数是否允许使用dir_fd参数，请使用`supports_dir_fd`中的运算符中的`in` 作为示例，此表达式确定`os.stat()`的dir_fd参数是否本地可用：

      os.stat in os.supports_dir_fd

  目前dir_fd参数仅适用于Unix平台；他们都没有在Windows上工作。

  版本3.3中的新功能。

`os.``supports_effective_ids`

  指示`os`模块中的哪些函数允许`os.access()`使用effective_ids参数的`Set` 。如果本地平台支持它，则集合将包含`os.access()`，否则它将为空。

  要检查`os.access()`是否可以使用effective_ids参数，请在`supports_effective_ids`的运算符中使用`in`

      os.access in os.supports_effective_ids

  目前effective_ids仅适用于Unix平台；它不适用于Windows。

  版本3.3中的新功能。

`os.``supports_fd`

  `Set`对象指示`os`模块中的哪些函数允许将路径参数指定为打开的文件描述符。不同的平台提供不同的功能，并且可能在另一个平台上工作的选项可能不受支持。为了保持一致性，支持fd的函数总是允许指定参数，但如果功能实际上不可用，则会引发异常。

  要检查特定函数是否允许为其path参数指定打开的文件描述符，请使用`supports_fd`中的运算符中的`in` 作为一个例子，这个表达式决定了当你的本地平台调用时，`os.chdir()`是否接受打开的文件描述符：

      os.chdir in os.supports_fd

  版本3.3中的新功能。

`os.``supports_follow_symlinks`

  `Set`对象指示`os`模块中的哪些函数允许使用它们的follow_symlinks参数。不同的平台提供不同的功能，并且可能在另一个平台上工作的选项可能不受支持。出于一致性的考虑，支持follow_symlinks的函数总是允许指定参数，但如果功能实际上不可用，则会引发异常。

  要检查特定函数是否允许使用follow_symlinks参数，请使用`supports_follow_symlinks`中的运算符中的`in` 作为一个例子，这个表达式确定`os.stat()`的follow_symlinks参数是否是本地可用的：

      os.stat in os.supports_follow_symlinks

  版本3.3中的新功能。

`os.``symlink`(src, dst, target_is_directory=False, *, dir_fd=None)

  创建一个指向名为dst的src的符号链接。

  在Windows上，符号链接表示文件或目录，并且不会动态变形为目标。如果目标存在，则会创建符合链接的类型以匹配。否则，如果target_is_directory为`True`或符号链接（默认），则符号链接将创建为目录。在非Window平台上，target_is_directory被忽略。

  在Windows 6.0（Vista）中引入了符号链接支持。`symlink()` will raise a `NotImplementedError` on Windows versions earlier than 6.0.

  该函数可以支持paths relative to directory descriptors的路径。

  注意

  在Windows上，为了成功创建符号链接，需要SeCreateSymbolicLinkPrivilege。此权限通常不授予常规用户，但可用于可将权限提升到管理员级别的帐户。获得权限或以管理员身份运行应用程序是成功创建符号链接的方法。

  `OSError` is raised when the function is called by an unprivileged user.

  可用性：Unix，Windows。

  在版本3.2中更改：添加了对Windows 6.0（Vista）符号链接的支持。

  3.3版新增功能：在非Windows平台上添加了dir_fd参数，现在允许target_is_directory。

`os.``sync`()

  强制将所有内容写入磁盘。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``truncate`(path, length)

  截断与路径对应的文件，以便它的大小至多为长度字节。

  该函数可以支持specifying a file descriptor。

  可用性：Unix，Windows。

  版本3.3中的新功能。

  版本3.5中已更改：添加了对Windows的支持

`os.``unlink`(path, *, dir_fd=None)

  删除（删除）文件路径。这个函数在语义上与`remove()`；相同。 `unlink`名称是其传统的Unix名称。有关更多信息，请参阅`remove()`的文档。

  版本3.3新增： dir_fd参数。

`os.``utime`(path, times=None, *, [ns, ]dir_fd=None, follow_symlinks=True)

  设置由path指定的文件的访问和修改时间。

  `utime()`采用两个可选参数，时间数和纳秒。这些指定了在路径上设置的时间，并按以下方式使用：

  - 如果指定了ns，它必须是`（atime_ns， mtime_ns）`形式的2元组，其中每个成员是一个int表达纳秒。
  - 如果次不是`None`，它必须是`形式的两元组（atime， mtime） t5>`其中每个成员都是表示秒的int或float。
  - 如果次为`None`且未指定ns，这相当于指定`ns =（atime_ns， `mtime_ns）`这两个时间都是当前时间。`

  为次和ns指定元组是错误的。

  是否可以为路径提供一个目录取决于操作系统是否将目录实现为文件（例如Windows不）。请注意，您在此设置的确切时间可能不会由随后的`stat()`调用返回，具体取决于操作系统记录访问和修改时间的分辨率；请参阅`stat()`。保留精确时间的最佳方法是将`os.stat()`结果对象中的st_atime_ns和st_mtime_ns字段与ns参数到utime。

  该函数可以支持specifying a file descriptor，paths relative to directory descriptors的路径和not following symlinks的路径。

  3.3版新增：增加了对指定路径和dir_fd，follow_symlinks的打开文件描述符的支持，和ns参数。

`os.``walk`(top, topdown=True, onerror=None, followlinks=False)

  遍历目录树，自顶向下或自底向上生成目录树下的文件名。对根目录top（包括根目录top本身）中的每个目录，它都会yield一个3元元组`(dirpath, dirnames, filenames)`。

  dirpath是一个字符串，为目录路径。dirnames是dirpath中子目录的名称列表（不包括`'.'`和`'..'`)。文件名是dirpath中非目录文件的名称列表。注意，列表中的名称不包含路径部分。要获得dirpath 中的文件或目录的完整路径(以 top开头), 请使用`os.path.join(dirpath, name)`.

  如果可选参数topdown为`True`或未指定，则在生成其任何子目录的三元组tuple之前生成其本身的三元组tuple。（简言之就是自上而下遍历）如果topdown是`False`，则在生成所有子目录的三元组之后生成其本身的三元组（即自下而上生成）。无论topdown的值如何，在生成目录及其子目录的元组之前，都会检索子目录列表。

  当topdown为`True`时，调用者可以就地修改dirnames列表（也许使用`del` ），并且`walk()`仅会递归到名称保留在dirnames中的子目录；这可以用来修剪搜索，强制访问的特定顺序，甚至可以通知`walk()`关于调用者在恢复之前创建或重命名的目录`walk()`再次。当topdown为`False`时，修改dirnames对walk的行为没有影响，因为在自底向上模式下，dirnames 在dirpath本身生成之前生成。

  默认情况下，来自`listdir()`的错误将被忽略。如果指定了可选参数onerror，它应该是一个函数；it will be called with one argument, an `OSError` instance.它可以报告错误以继续步行，或者提出异常以中止步行。请注意，文件名可用作异常对象的`filename`属性。

  默认情况下，`walk()`不会走向解析为目录的符号链接。在支持它们的系统上，设置followlinks为`True`以访问由符号链接指向的目录。

  注意

  请注意，如果链接指向其自身的父目录，则将followlinks设置为`True`可导致无限递归。`walk()`不会跟踪它已经访问的目录。

  注意

  如果传递相对路径名，请不要在`walk()`重新开始之间更改当前工作目录。`walk()`永远不会更改当前目录，并假定它的调用者也不会。

  此示例显示非目录文件在起始目录下的每个目录中占用的字节数，但不显示在任何CVS子目录下：

      import os
      from os.path import join, getsize
      for root, dirs, files in os.walk('python/Lib/email'):
          print(root, "consumes", end=" ")
          print(sum(getsize(join(root, name)) for name in files), end=" ")
          print("bytes in", len(files), "non-directory files")
          if 'CVS' in dirs:
              dirs.remove('CVS')  # don't visit CVS directories

  In the next example (simple implementation of `shutil.rmtree()`), walking the tree bottom-up is essential, `rmdir()` doesn’t allow deleting a directory before the directory is empty:

      # Delete everything reachable from the directory named in "top",
      # assuming there are no symbolic links.
      # CAUTION:  This is dangerous!  For example, if top == '/', it
      # could delete all your disk files.
      import os
      for root, dirs, files in os.walk(top, topdown=False):
          for name in files:
              os.remove(os.path.join(root, name))
          for name in dirs:
              os.rmdir(os.path.join(root, name))

  Changed in version 3.5: This function now calls `os.scandir()` instead of `os.listdir()`, making it faster by reducing the number of calls to `os.stat()`.

`os.``fwalk`(top='.', topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None)

  行为与`walk()`非常类似，不同的是它产生一个4元组`(dirpath, dirnames, filenames, dirfd)`，并支持`dir_fd`。

  dirpath, dirnames and filenames are identical to `walk()` output, and dirfd is a file descriptor referring to the directory dirpath.

  该函数始终支持paths relative to directory descriptors和not following symlinks的路径。但请注意，与其他函数不同，follow_symlinks的`fwalk()`默认值为`False`。

  注意

  由于`fwalk()`产生文件描述符，这些描述符只有在下一个迭代步骤之前才有效，所以你应该复制它们。与`dup()`），如果你想保持更长的时间。

  此示例显示非目录文件在起始目录下的每个目录中占用的字节数，但不显示在任何CVS子目录下：

      import os
      for root, dirs, files, rootfd in os.fwalk('python/Lib/email'):
          print(root, "consumes", end="")
          print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]),
                end="")
          print("bytes in", len(files), "non-directory files")
          if 'CVS' in dirs:
              dirs.remove('CVS')  # don't visit CVS directories

  在下一个示例中，从下往上走树是至关重要的：`rmdir()`不允许在目录为空之前删除目录：

      # Delete everything reachable from the directory named in "top",
      # assuming there are no symbolic links.
      # CAUTION:  This is dangerous!  For example, if top == '/', it
      # could delete all your disk files.
      import os
      for root, dirs, files, rootfd in os.fwalk(top, topdown=False):
          for name in files:
              os.unlink(name, dir_fd=rootfd)
          for name in dirs:
              os.rmdir(name, dir_fd=rootfd)

  可用性：UNIX。

  版本3.3中的新功能。

### 16.1.5.1. Linux扩展属性

版本3.3中的新功能。

这些功能仅在Linux上可用。

`os.``getxattr`(path, attribute, *, follow_symlinks=True)

  为路径返回扩展文件系统属性属性的值。属性可以是字节或字符串。如果它是str，则用文件系统编码进行编码。

  此函数可以支持specifying a file descriptor和not following symlinks。

`os.``listxattr`(path=None, *, follow_symlinks=True)

  返回路径上的扩展文件系统属性列表。列表中的属性表示为用文件系统编码解码的字符串。If path is `None`, `listxattr()` will examine the current directory.

  此函数可以支持specifying a file descriptor和not following symlinks。

`os.``removexattr`(path, attribute, *, follow_symlinks=True)

  从路径中删除扩展文件系统属性属性。属性应该是字节或str。如果它是一个字符串，则用文件系统编码进行编码。

  此函数可以支持specifying a file descriptor和not following symlinks。

`os.``setxattr`(path, attribute, value, flags=0, *, follow_symlinks=True)

  将路径上的扩展文件系统属性属性设置为值。属性必须是没有嵌入式NUL的字节或字符串。如果它是一个str，它将用文件系统编码进行编码。flags may be `XATTR_REPLACE` or `XATTR_CREATE`. If `XATTR_REPLACE` is given and the attribute does not exist, `EEXISTS` will be raised. 如果给出`XATTR_CREATE`并且该属性已经存在，那么该属性将不会被创建，并且会引发`ENODATA`。

  此函数可以支持specifying a file descriptor和not following symlinks。

  注意

  Linux内核版本低于2.6.39的错误导致在某些文件系统上flags参数被忽略。

`os.``XATTR_SIZE_MAX`

  扩展属性值的最大大小可以是。目前，这是Linux上的64 KiB。

`os.``XATTR_CREATE`

  这是`setxattr()`中flags参数的可能值。它表示操作必须创建一个属性。

`os.``XATTR_REPLACE`

  这是`setxattr()`中flags参数的可能值。它表示操作必须替换现有的属性。

## 16.1.6. 流程管理

这些功能可用于创建和管理进程。

各种`exec*`函数为加载到进程中的新程序提供参数列表。在每种情况下，这些参数中的第一个将作为自己的名称传递给新程序，而不是作为用户可能在命令行上输入的参数。对于C程序员来说，这是传递给程序的`main()`的`argv[0]`。For example, `os.execv('/bin/echo', ['foo', 'bar'])` will only print `bar` on standard output; `foo` will seem to be ignored.

`os.``abort`()

  生成一个`SIGABRT`信号给当前进程。在Unix上，默认行为是产生核心转储；在Windows上，该进程立即返回`3`的退出码。请注意，调用此函数不会使用`signal.signal()`调用为`SIGABRT`注册的Python信号处理程序。

`os.``execl`(path, arg0, arg1, ...)
`os.``execle`(path, arg0, arg1, ..., env)
`os.``execlp`(file, arg0, arg1, ...)
`os.``execlpe`(file, arg0, arg1, ..., env)
`os.``execv`(path, args)
`os.``execve`(path, args, env)
`os.``execvp`(file, args)
`os.``execvpe`(file, args, env)

  这些功能都执行一个新程序，取代当前进程；他们不回来。在Unix上，这组函数可以把一个新的可执行程序加载入当前的进程，并且进程保持process id不变。错误将被报告为`OSError`异常。

  当前进程中的程序会立即被替代。Open file objects and descriptors are not flushed, so if there may be data buffered on these open files, you should flush them using `sys.stdout.flush()` or `os.fsync()` before calling an `exec*` function.

  `exec*`函数的“l”和“v”变体在传递命令行参数方面有所不同。如果在编写代码时参数的数量是固定的，则“l”变体可能是最容易使用的变体；各个参数只是成为`execl*()`函数的附加参数。当参数的数量是可变的时，“v”变体是很好的，参数以列表或元组的形式作为args参数传递。在任何一种情况下，子进程的参数都应以正在运行的命令的名称开始，但这不是强制执行的。

  The variants which include a “p” near the end (`execlp()`, `execlpe()`, `execvp()`, and `execvpe()`) will use the `PATH` environment variable to locate the program file. 当环境被替换时（使用下一段讨论的`exec*e`变体之一），新环境被用作 `PATH`变量。The other variants, `execl()`, `execle()`, `execv()`, and `execve()`, will not use the `PATH` variable to locate the executable; path must contain an appropriate absolute or relative path.

  For `execle()`, `execlpe()`, `execve()`, and `execvpe()` (note that these all end in “e”), the env parameter must be a mapping which is used to define the environment variables for the new process (these are used instead of the current process’ environment); the functions `execl()`, `execlp()`, `execv()`, and `execvp()` all cause the new process to inherit the environment of the current process.

  对于某些平台上的`execve()`，path也可以指定为打开的文件描述符。您的平台可能不支持此功能；您可以使用`os.supports_fd`检查它是否可用。如果不可用，使用它将引发一个`NotImplementedError`。

  可用性：Unix，Windows。

  版本3.3新增：新增支持为`execve()`指定路径的开放文件描述符。

`os.``_exit`(n)

  状态n退出进程，无需调用清理处理程序，刷新stdio缓冲区等。

  注意

  标准的退出方式是`sys.exit(n)`。`_exit()`通常只应在`fork()`之后的子进程中使用。

以下退出代码已定义并可与`_exit()`一起使用，尽管它们不是必需的。这些通常用于以Python编写的系统程序，例如邮件服务器的外部命令传递程序。

注意

其中一些可能不适用于所有的Unix平台，因为有一些变化。这些常量被定义在底层平台所定义的位置。

`os.``EX_OK`

  退出代码意味着没有发生错误。

  可用性：UNIX。

`os.``EX_USAGE`

  退出代码意味着命令被错误地使用，例如给出错误的参数数量。

  可用性：UNIX。

`os.``EX_DATAERR`

  退出代码意味着输入数据不正确。

  可用性：UNIX。

`os.``EX_NOINPUT`

  退出代码意味着输入文件不存在或不可读。

  可用性：UNIX。

`os.``EX_NOUSER`

  退出代码，意味着指定的用户不存在。

  可用性：UNIX。

`os.``EX_NOHOST`

  退出代码，意味着指定的主机不存在。

  可用性：UNIX。

`os.``EX_UNAVAILABLE`

  退出代码，这意味着所需的服务不可用。

  可用性：UNIX。

`os.``EX_SOFTWARE`

  退出代码意味着检测到内部软件错误。

  可用性：UNIX。

`os.``EX_OSERR`

  退出代码意味着检测到操作系统错误，例如无法分叉或创建管道。

  可用性：UNIX。

`os.``EX_OSFILE`

  退出代码意味着某些系统文件不存在，无法打开或出现其他类型的错误。

  可用性：UNIX。

`os.``EX_CANTCREAT`

  退出代码意味着无法创建用户指定的输出文件。

  可用性：UNIX。

`os.``EX_IOERR`

  退出代码意味着在某个文件上执行I / O时发生错误。

  可用性：UNIX。

`os.``EX_TEMPFAIL`

  退出代码意味着发生了临时故障。这表示可能不是真正的错误，例如在重试操作期间无法建立的网络连接。

  可用性：UNIX。

`os.``EX_PROTOCOL`

  退出代码意味着协议交换是非法的，无效的或不被理解的。

  可用性：UNIX。

`os.``EX_NOPERM`

  退出代码意味着没有足够的权限执行操作（但不适用于文件系统问题）。

  可用性：UNIX。

`os.``EX_CONFIG`

  退出代码意味着发生某种配置错误。

  可用性：UNIX。

`os.``EX_NOTFOUND`

  退出代码意味着类似“未找到条目”。

  可用性：UNIX。

`os.``fork`()

  叉一个孩子的过程。返回子节点中的`0`以及父节点中的子进程标识。如果发生错误`OSError`。

  请注意，从线程使用fork()时，包括FreeBSD <= 6.3和Cygwin在内的一些平台已知问题。

  警告

  对于使用带fork()的SSL模块的应用程序，请参见`ssl`。

  可用性：UNIX。

`os.``forkpty`()

  用一个新的伪终端作为孩子的控制终端，把一个子进程分叉开来。返回一对`（pid， fd）`，其中pid为`0`孩子，父亲中的新孩子的进程ID，以及fd是伪终端主端的文件描述符。对于更便携的方法，请使用`pty`模块。如果发生错误`OSError`。

  可用性：一些Unix的味道。

`os.``kill`(pid, sig)

  发送信号sig到进程pid。主机平台上可用的特定信号的常数在`signal`模块中定义。

  Windows：`signal.CTRL_C_EVENT`和`signal.CTRL_BREAK_EVENT`信号是特殊信号，只能发送到共享公共控制台窗口的控制台进程，例如某些子进程。对于sig的任何其他值都将导致进程无条件地被TerminateProcess API终止，并且退出代码将被设置为sig。Windows版本的`kill()`还需要终止进程句柄。

  另请参阅`signal.pthread_kill()`。

  3.2版中的新功能： Windows支持。

`os.``killpg`(pgid, sig)

  Send the signal sig to the process group pgid.

  可用性：UNIX。

`os.``nice`(increment)

  将increment添加到进程的“niceness”中。回报新的美好。

  可用性：UNIX。

`os.``plock`(op)

  将程序段锁定到内存中。op（在`<sys/lock.h>`中定义）的值确定哪些段被锁定。

  可用性：UNIX。

`os.``popen`(cmd, mode='r', buffering=-1)

  从命令cmd打开管道。返回值是一个连接到管道的打开文件对象，根据mode是否为`'r'`（默认值）或`'w'`buffering参数的含义与内置的`open()`函数的相应参数相同。返回的文件对象读取或写入文本字符串而不是字节。

  如果子进程成功退出，则`close`方法返回`None`，如果发生错误，则返回子进程的返回码。在POSIX系统上，如果返回码是正值，它表示进程的返回值左移一个字节。如果返回码是负数，则处理过程由返回码的取反值给出的信号终止。（例如，如果子进程被终止，返回值可能是`- signal.SIGKILL`。）在Windows系统上，返回值包含子进程的带符号整数返回码。

  这是通过使用`subprocess.Popen`；请参阅该类的文档以获取更多有效的方式来管理和与子流程进行通信。

`os.``spawnl`(mode, path, ...)
`os.``spawnle`(mode, path, ..., env)
`os.``spawnlp`(mode, file, ...)
`os.``spawnlpe`(mode, file, ..., env)
`os.``spawnv`(mode, path, args)
`os.``spawnve`(mode, path, args, env)
`os.``spawnvp`(mode, file, args)
`os.``spawnvpe`(mode, file, args, env)

  在新进程中执行程序路径。

  （请注意，`subprocess`模块为产生新进程和检索结果提供了更强大的功能；使用该模块优于使用这些功能。特别检查Replacing Older Functions with the subprocess Module部分替换旧功能。）

  如果mode是`P_NOWAIT`，则此函数返回新进程的进程ID；如果mode是`P_WAIT`，则返回进程的退出代码（如果它正常退出）或`-signal`，其中signal杀死该进程的信号。在Windows上，进程ID实际上是进程句柄，因此可以与`waitpid()`函数一起使用。

  `spawn*`函数的“l”和“v”变体在传递命令行参数方面有所不同。如果在编写代码时参数的数量是固定的，则“l”变体可能是最容易使用的变体；各个参数只是成为`spawnl*()`函数的附加参数。当参数的数量是可变的时，“v”变体是很好的，参数以列表或元组的形式作为args参数传递。无论哪种情况，子进程的参数都必须以正在运行的命令的名称开始。

  The variants which include a second “p” near the end (`spawnlp()`, `spawnlpe()`, `spawnvp()`, and `spawnvpe()`) will use the `PATH` environment variable to locate the program file. 当环境被替换时（使用下一段讨论的`spawn*e`变体之一），新环境被用作 `PATH`变量。The other variants, `spawnl()`, `spawnle()`, `spawnv()`, and `spawnve()`, will not use the `PATH` variable to locate the executable; path must contain an appropriate absolute or relative path.

  For `spawnle()`, `spawnlpe()`, `spawnve()`, and `spawnvpe()` (note that these all end in “e”), the env parameter must be a mapping which is used to define the environment variables for the new process (they are used instead of the current process’ environment); the functions `spawnl()`, `spawnlp()`, `spawnv()`, and `spawnvp()` all cause the new process to inherit the environment of the current process. 请注意，env字典中的键和值必须是字符串；无效的键或值将导致函数失败，返回值为`127`。

  例如，以下对`spawnlp()`和`spawnvpe()`的调用是等效的：

      import os
      os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')

      L = ['cp', 'index.html', '/dev/null']
      os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)

  可用性：Unix，Windows。`spawnlp()`, `spawnlpe()`, `spawnvp()` and `spawnvpe()` are not available on Windows. `spawnle()` and `spawnve()` are not thread-safe on Windows; we advise you to use the `subprocess` module instead.

`os.``P_NOWAIT`
`os.``P_NOWAITO`

  `spawn*`系列函数的mode参数的可能值。如果给出了这两个值中的任何一个，那么一旦创建新进程，`spawn*()`函数将返回，进程ID将作为返回值。

  可用性：Unix，Windows。

`os.``P_WAIT`

  `spawn*`系列函数的模式参数的可能值。如果这是以mode的形式给出的，那么`spawn*()`函数将不会返回，直到新进程运行完成并返回进程的退出代码成功或`-signal`，如果信号杀死进程。

  可用性：Unix，Windows。

`os.``P_DETACH`
`os.``P_OVERLAY`

  `spawn*`系列函数的mode参数的可能值。这些便携式比上面列出的便携式更少。`P_DETACH`类似于`P_NOWAIT`，但新进程从调用进程的控制台分离。如果使用`P_OVERLAY`，则当前进程将被替换； `spawn*`函数不会返回。

  可用性：Windows。

`os.``startfile`(path[, operation])

  用相关的应用程序启动一个文件。

  当没有指定操作或`'open'`时，这就像在Windows资源管理器中双击文件或将文件名作为参数指向start 来自交互式命令shell的命令：该文件与其扩展关联的任何应用程序（如果有的话）打开。

  当给出另一个操作时，它必须是一个“命令动词”，指定应该对文件执行什么操作。Microsoft记录的常见动词是`'print'`和`'edit'`（用于文件）以及`'explore'`和`'find'`（用于目录）。

  `startfile()` returns as soon as the associated application is launched. 没有选项可以等待应用程序关闭，也无法检索应用程序的退出状态。路径参数相对于当前目录。如果你想使用绝对路径，确保第一个字符不是斜线（`'/'`）；底层Win32 `ShellExecute()`函数不起作用。使用`os.path.normpath()`函数确保路径为Win32正确编码。

  为了减少解释器启动开销，Win32 `ShellExecute()`函数在第一次调用该函数之前不会被解析。如果函数无法解析，则会引发`NotImplementedError`。

  可用性：Windows。

`os.``system`(command)

  在子shell中执行命令（一个字符串）。这是通过调用标准C函数`system()`来实现的，并且具有相同的限制。对`sys.stdin`等的更改不会反映在执行命令的环境中。如果命令产生任何输出，它将被发送到解释器标准输出流。

  在Unix上，返回值是以`wait()`指定的格式编码的进程的退出状态。请注意，POSIX没有指定C `system()`函数的返回值的含义，所以Python函数的返回值是依赖于系统的。

  在Windows上，返回值是运行命令后由系统shell返回的值。该shell由Windows环境变量 `COMSPEC`给出：它通常是cmd.exe，它返回命令run的退出状态；在使用非本地shell的系统上，请查阅您的shell文档。

  `subprocess`模块为产生新流程和检索结果提供了更强大的功能；使用该模块优于使用此功能。请参阅`subprocess`文档中Replacing Older Functions with the subprocess Module部分替换旧功能以获取一些有用的配方。

  可用性：Unix，Windows。

`os.``times`()

  返回当前的全局流程时间。返回值是一个具有五个属性的对象：

  - `user` - 用户时间
  - `system` - 系统时间
  - `children_user` - 所有子进程的用户时间
  - `children_system` - 所有子进程的系统时间
  - `elapsed` - 自过去的固定点开始经过的实时时间

  为了向后兼容，这个对象的行为就像一个包含`user`，`system`，`children_user`，`children_system`的五元组，和`elapsed`。

  请参阅Unix手册页次（2）或相应的Windows平台API文档。在Windows上，只有`user`和`system`是已知的；其他属性为零。

  可用性：Unix，Windows。

  在版本3.3中改变：返回类型从一个元组改变为一个具有命名属性的元组对象。

`os.``wait`()

  等待子进程完成，并返回一个包含它的pid和退出状态指示的元组：一个16位数字，其低字节是杀死进程的信号编号，其高字节是退出状态（如果信号数字为零）；如果生成核心文件，则设置低字节的高位。

  可用性：UNIX。

`os.``waitid`(idtype, id, options)

  等待一个或多个子进程的完成。idtype可以是`P_PID`，`P_PGID`或`P_ALL`。id指定要等待的pid。options is constructed from the ORing of one or more of `WEXITED`, `WSTOPPED` or `WCONTINUED` and additionally may be ORed with `WNOHANG` or `WNOWAIT`. The return value is an object representing the data contained in the `siginfo_t` structure, namely: `si_pid`, `si_uid`, `si_signo`, `si_status`, `si_code` or `None` if `WNOHANG` is specified and there are no children in a waitable state.

  可用性：UNIX。

  版本3.3中的新功能。

`os.``P_PID`
`os.``P_PGID`
`os.``P_ALL`

  这些是`waitid()`中idtype的可能值。它们影响如何解释id。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``WEXITED`
`os.``WSTOPPED`
`os.``WNOWAIT`

  可以在`waitid()`的options中使用的标志指定要等待的子信号。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``CLD_EXITED`
`os.``CLD_DUMPED`
`os.``CLD_TRAPPED`
`os.``CLD_CONTINUED`

  这些是由`waitid()`返回的结果中`si_code`的可能值。

  可用性：UNIX。

  版本3.3中的新功能。

`os.``waitpid`(pid, options)

  这个功能的细节在Unix和Windows上有所不同。

  在Unix上：等待进程id pid给出的子进程的完成，然后返回一个包含进程ID和退出状态指示（编码为`wait()`）的元组。 。调用的语义受整数options的值影响，对于正常操作，该值应`0`。

  如果pid大于`0`，则`waitpid()`请求该特定进程的状态信息。如果pid为`0`，则该请求用于当前进程的进程组中任何子进程的状态。如果pid为`-1`，则请求与当前进程的任何子进程有关。如果pid小于`-1`，则进程组`-pid`中的任何进程都请求状态（pid的绝对值 T5>）。

  An `OSError` is raised with the value of errno when the syscall returns -1.

  在Windows上：等待进程句柄pid给出的进程完成并返回一个包含pid的元组，并且其退出状态左移8位平台使用的功能更简单）。小于或等于`0`的pid在Windows上没有特殊含义，并引发异常。整数选项的值不起作用。pid可以指任何已知id的进程，不一定是子进程。用`P_NOWAIT`调用的`spawn*`函数返回合适的进程句柄。

  Changed in version 3.5: If the system call is interrupted and the signal handler does not raise an exception, the function now retries the system call instead of raising an `InterruptedError` exception (see PEP 475 for the rationale).

`os.``wait3`(options)

  类似于`waitpid()`，除了没有给出进程ID参数并且返回包含子进程ID，退出状态指示和资源使用信息的3元素元组。有关资源使用情况的详细信息，请参阅`resource`。`getrusage()`。option参数与提供给`waitpid()`和`wait4()`的参数相同。

  可用性：UNIX。

`os.``wait4`(pid, options)

  类似于`waitpid()`，除了包含子进程ID，退出状态指示和资源使用信息的3元素元组之外，它被返回。有关资源使用情况的详细信息，请参阅`resource`。`getrusage()`。`wait4()`的参数与提供给`waitpid()`的参数相同。

  可用性：UNIX。

`os.``WNOHANG`

  如果没有子进程状态立即可用，`waitpid()`选项立即返回。在这种情况下，函数返回`（0， 0）`。

  可用性：UNIX。

`os.``WCONTINUED`

  此选项会导致子进程在自上次报告状态后已从作业控制停止继续进行报告。

  可用性：一些Unix系统。

`os.``WUNTRACED`

  这个选项会导致子进程被报告，如果它们已经被停止，但是它们的当前状态自停止以来还没有被报告。

  可用性：UNIX。

以下函数将`system()`，`wait()`或`waitpid()`作为参数返回的进程状态码。他们可能被用来确定一个过程的处置。

`os.``WCOREDUMP`(status)

  如果为进程生成核心转储，则返回`True`，否则返回`False`。

  可用性：UNIX。

`os.``WIFCONTINUED`(status)

  如果进程从作业控制停止继续，则返回`True`，否则返回`False`。

  可用性：UNIX。

`os.``WIFSTOPPED`(status)

  如果进程已停止，则返回`True`，否则返回`False`。

  可用性：UNIX。

`os.``WIFSIGNALED`(status)

  如果进程由于信号而退出，则返回`True`，否则返回`False`。

  可用性：UNIX。

`os.``WIFEXITED`(status)

  如果进程使用exit（2）系统调用退出，则返回`True`，否则返回`False`。

  可用性：UNIX。

`os.``WEXITSTATUS`(status)

  如果`WIFEXITED(status)`为true，则返回整型参数到exit（2）系统调用。否则，返回值是没有意义的。

  可用性：UNIX。

`os.``WSTOPSIG`(status)

  返回导致进程停止的信号。

  可用性：UNIX。

`os.``WTERMSIG`(status)

  返回导致进程退出的信号。

  可用性：UNIX。

## 16.1.7. 调度程序的接口

这些功能控制操作系统如何为进程分配CPU时间。它们仅在某些Unix平台上可用。有关更多详细信息，请参阅您的Unix手册页。

版本3.3中的新功能。

如果操作系统支持以下调度策略，则会公开它们。

`os.``SCHED_OTHER`

  默认调度策略。

`os.``SCHED_BATCH`

  为尝试保留计算机其余部分的交互性的CPU密集型进程调度策略。

`os.``SCHED_IDLE`

  为极低优先级的后台任务调度策略。

`os.``SCHED_SPORADIC`

  针对零星服务器程序的调度策略。

`os.``SCHED_FIFO`

  先进先出调度策略。

`os.``SCHED_RR`

  循环调度策略。

`os.``SCHED_RESET_ON_FORK`

  该标志可以与任何其他调度策略进行或运算。当具有此标志的进程设置分支时，其子进程的调度策略和优先级将重置为默认值。

class `os.``sched_param`(sched_priority)

  该类表示在`sched_setparam()`，`sched_setscheduler()`和`sched_getparam()`中使用的可调参数。它是不可变的。

  目前，只有一个可能的参数：

  `sched_priority`

    调度策略的调度优先级。

`os.``sched_get_priority_min`(policy)

  获取策略的最低优先级值。policy是以上调度策略常量之一。

`os.``sched_get_priority_max`(policy)

  获取策略的最大优先级值。policy是以上调度策略常量之一。

`os.``sched_setscheduler`(pid, policy, param)

  使用PID pid设置进程的调度策略。A pid of 0 means the calling process. policy是以上调度策略常量之一。param是一个`sched_param`实例。

`os.``sched_getscheduler`(pid)

  用PID pid返回进程的调度策略。A pid of 0 means the calling process. 结果是上面的一个调度策略常量。

`os.``sched_setparam`(pid, param)

  使用PID pid为进程设置调度参数。A pid of 0 means the calling process. param是一个`sched_param`实例。

`os.``sched_getparam`(pid)

  将具有PID pid的进程的调度参数作为`sched_param`实例返回。A pid of 0 means the calling process.

`os.``sched_rr_get_interval`(pid)

  用PID pid返回循环过程的秒数。A pid of 0 means the calling process.

`os.``sched_yield`()

  自愿放弃CPU。

`os.``sched_setaffinity`(pid, mask)

  用PID pid（或当前进程，如果为零）限制进程到一组CPU。掩码是一个整数的迭代表示应该限制进程的CPU集合。

`os.``sched_getaffinity`(pid)

  返回具有PID pid（或当前过程，如果为零）的过程的CPU集合限制为。

## 16.1.8. 其他系统信息

`os.``confstr`(name)

  返回字符串值的系统配置值。name指定要检索的配置值；它可能是一个字符串，它是定义的系统值的名称；这些名称是在许多标准（POSIX，Unix 95，Unix 98等）中指定的。一些平台也定义了其他名称。主机操作系统已知的名称是作为`confstr_names`字典的关键字提供的。对于不包含在该映射中的配置变量，也接受传递name的整数。

  如果未定义name指定的配置值，则返回`None`。

  如果name是一个字符串且未知，则引发`ValueError`。如果主机系统不支持name的特定值，即使它包含在`confstr_names`中，`OSError`也会以`errno.EINVAL`作为错误号。

  可用性：UNIX。

`os.``confstr_names`

  由`confstr()`接受的字典映射名称与主机操作系统为这些名称定义的整数值。这可以用来确定系统已知的一组名称。

  可用性：UNIX。

`os.``cpu_count`()

  返回系统中的CPU数量。如果不确定，则返回None。

  版本3.4中的新功能。

`os.``getloadavg`()

  如果无法获得负载平均值，则返回系统运行队列中过去1分钟，5分钟和15分钟内平均的进程数量或引发`OSError`。

  可用性：UNIX。

`os.``sysconf`(name)

  返回整数值的系统配置值。如果未定义name指定的配置值，则返回`-1`。关于`confstr()`的name参数的注释也适用于此处；提供已知名称信息的字典由`sysconf_names`给出。

  可用性：UNIX。

`os.``sysconf_names`

  由`sysconf()`接受的字典映射名称与主机操作系统为这些名称定义的整数值。这可以用来确定系统已知的一组名称。

  可用性：UNIX。

以下数据值用于支持路径操作操作。这些都是为所有平台定义的。

路径名上的高级操作在`os.path`模块中定义。

`os.``curdir`

  操作系统用来引用当前目录的常量字符串。这是`'.'`对于Windows和POSIX。也可以通过`os.path`使用。

`os.``pardir`

  操作系统用来引用父目录的常量字符串。这是Windows和POSIX的`'..'`。也可以通过`os.path`使用。

`os.``sep`

  操作系统用来分隔路径名组件的字符。这是针对Windows的`'/'`和Windows的`'\\'`。请注意，知道这不足以解析或连接路径名 - 使用`os.path.split()`和`os.path.join()` - 但它是偶尔有用。也可以通过`os.path`使用。

`os.``altsep`

  操作系统用来分隔路径名组件的替代字符，或者如果只有一个分隔符字符，则`None`。在`sep`是反斜杠的Windows系统上，它被设置为`'/'`。也可以通过`os.path`使用。

`os.``extsep`

  将基本文件名与扩展名分开的字符；例如，`'.'`在`os.py`中。也可以通过`os.path`使用。

`os.``pathsep`

  The character conventionally used by the operating system to separate search path components (as in `PATH`), such as `':'` for POSIX or `';'` for Windows. 也可以通过`os.path`使用。

`os.``defpath`

  如果环境没有`'PATH'`键，`exec*p*`和`spawn*p*`使用的默认搜索路径。也可以通过`os.path`使用。

`os.``linesep`

  用于在当前平台上分隔（或相反，终止）行的字符串。这可能是单个字符，例如POSIX的`'\n'`或Windows的多个字符，例如`'\r\n'`。编写以文本模式打开的文件时（默认），不要使用os.linesep作为行终止符；在所有平台上使用单个`'\n'`。

`os.``devnull`

  空设备的文件路径。例如：用于Windows的`'/dev/null'`，用于Windows的`'nul'`。也可以通过`os.path`使用。

`os.``RTLD_LAZY`
`os.``RTLD_NOW`
`os.``RTLD_GLOBAL`
`os.``RTLD_LOCAL`
`os.``RTLD_NODELETE`
`os.``RTLD_NOLOAD`
`os.``RTLD_DEEPBIND`

  用于`setdlopenflags()`和`getdlopenflags()`函数的标志。查看Unix手册页面dlopen（3）了解不同标志的含义。

  版本3.3中的新功能。

## 16.1.9. 其他函数

`os.``urandom`(n)

  返回n个字节的用以加密的随机字符串

  此函数从操作系统特定的随机源返回随机字节.返回的数据对于加密应用程序应该是不可预测的，尽管其确切的质量取决于OS实现。

  在Linux上，使用`getrandom()`系统调用（如果可用且urandom熵池已初始化）（`getrandom()`不会阻止）。在一个类似Unix的系统上，它会查询`/dev/urandom`。在Windows上，它将使用`CryptGenRandom()`。如果没有找到随机源，则会引发`NotImplementedError`。

  对于您平台提供的随机数生成器的易用界面，请参阅`random.SystemRandom`。

  版本3.5.2中已更改：在Linux上，如果`getrandom()`块（urandom熵池尚未初始化），请回读`/dev/urandom`

  在版本3.5中更改：在Linux 3.17及更新版本中，现在可以使用`getrandom()`系统调用。在OpenBSD 5.6及更新版本上，现在使用C `getentropy()`函数。这些函数避免使用内部文件描述符。