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 不受支持。

注解

此模块中的所有功能均上升 OSError (或其子类)在文件名和路径无效或不可访问的情况下,或具有正确类型但操作系统不接受的其他参数。

exception os.error

内置的别名 OSError 例外。

os.name

导入的操作系统相关模块的名称。以下名称当前已注册: 'posix''nt''java' .

参见

sys.platform 粒度更细。 os.uname() 提供与系统相关的版本信息。

这个 platform 模块提供系统身份的详细检查。

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

在Python中,文件名、命令行参数和环境变量使用字符串类型表示。在某些系统上,在将这些字符串传递给操作系统之前,需要对这些字符串进行字节间的解码。Python使用 filesystem encoding and error handler 要执行此转换(请参见 sys.getfilesystemencoding() )。

这个 filesystem encoding and error handler 在Python启动时由 PyConfig_Read() 功能:请参阅 filesystem_encodingfilesystem_errors 成员: PyConfig

在 3.1 版更改: 在某些系统上,使用文件系统编码的转换可能会失败。在本例中,python使用 surrogateescape encoding error handler 这意味着不可编码的字节在解码时被一个Unicode字符U+DCXX替换,这些字节在编码时再次被转换为原始字节。

这个 file system encoding 必须保证成功解码128以下的所有字节。如果文件系统编码无法提供此保证,则API函数可以引发 UnicodeError

另请参阅 locale encoding

Python UTF-8模式

3.7 新版功能: 看见 PEP 540 了解更多详细信息。

Python UTF-8模式会忽略 locale encoding 并强制使用UTF-8编码:

请注意,UTF-8模式下的标准流设置可由 PYTHONIOENCODING (就像它们可以处于默认的区域设置感知模式一样)。

由于这些较低级别API的变化,其他较高级别API也表现出不同的默认行为:

  • 使用UTF-8编码将命令行参数、环境变量和文件名解码为文本。

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

  • open()io.open() ,以及 codecs.open() 默认情况下使用UTF-8编码。但是,默认情况下,它们仍然使用严格的错误处理程序,因此尝试以文本模式打开二进制文件可能会引发异常,而不是产生无意义的数据。

这个 Python UTF-8 Mode 如果LC_CTYPE区域设置为 CPOSIX 在Python启动时(请参阅 PyConfig_Read() 函数)。

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

如果 PYTHONUTF8 如果完全不设置环境变量,则解释器默认使用当前区域设置, 除非 当前区域设置被标识为传统的基于ASCII的区域设置(如中所述 PYTHONCOERCECLOCALE ),并且区域强制被禁用或失败。在这样的传统区域设置中,除非明确指示不要启用UTF-8模式,否则解释器将默认启用UTF-8模式。

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

另请参阅 UTF-8 mode on Windows 以及 filesystem encoding and error handler

工艺参数

这些功能和数据项提供信息,并对当前流程和用户进行操作。

os.ctermid()

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

Availability UNIX。

os.environ

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

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

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

在Unix上,键和值使用 sys.getfilesystemencoding()'surrogateescape' 错误处理程序。使用 environb 如果要使用其他编码。

注解

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

注解

在一些平台上,包括FreeBSD和Mac OS X,设置 environ 可能导致内存泄漏。请参阅系统文档以了解 putenv() .

可以删除此映射中的项以取消设置环境变量。 unsetenv() 从中删除项目时将自动调用 os.environ 当其中一个 pop()clear() 方法被调用。

在 3.9 版更改: 更新以支持 PEP 584 的合并 (| )和更新 (|= )操作员。

os.environb

字节版本 environ 答: mapping 对象,将环境表示为字节字符串。 environenvironb 同步(修改 environb 更新 environ 反之亦然)。

environb 仅在以下情况下可用 supports_bytes_environTrue .

3.2 新版功能.

在 3.9 版更改: 更新以支持 PEP 584 的合并 (| )和更新 (|= )操作员。

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

这些功能在 文件和目录 .

os.fsencode(filename)

Encode path-like filename to the filesystem encoding and error handler; return bytes unchanged.

fsdecode() 是反向功能。

3.2 新版功能.

在 3.6 版更改: 支持添加以接受实现 os.PathLike 接口。

os.fsdecode(filename)

Decode the path-like filename from the filesystem encoding and error handler; return str unchanged.

fsencode() 是反向功能。

3.2 新版功能.

在 3.6 版更改: 支持添加以接受实现 os.PathLike 接口。

os.fspath(path)

返回路径的文件系统表示形式。

如果 strbytes 传入,返回时不变。否则 __fspath__() 调用并返回其值,只要它是 strbytes 对象。在所有其他情况下, TypeError 提高了。

3.6 新版功能.

class os.PathLike

abstract base class 对于表示文件系统路径的对象,例如 pathlib.PurePath .

3.6 新版功能.

abstractmethod __fspath__()

返回对象的文件系统路径表示形式。

该方法只应返回 strbytes 对象,首选项为 str .

os.getenv(key, default=None)

返回环境变量的值 key 如果它存在,或者 default 如果没有。 keydefault 结果是str。

在Unix上,密钥和值用 sys.getfilesystemencoding()'surrogateescape' 错误处理程序。使用 os.getenvb() 如果要使用其他编码。

Availability :大多数风格的Unix、Windows。

os.getenvb(key, default=None)

返回环境变量的值 key 如果它存在,或者 default 如果没有。 keydefault 结果是字节。

getenvb() 仅在以下情况下可用 supports_bytes_environTrue .

Availability :大多数风格的Unix。

3.2 新版功能.

os.get_exec_path(env=None)

返回在启动进程时将搜索与shell类似的命名可执行文件的目录列表。 env 如果指定,则应为环境变量字典以查找中的路径。默认情况下,当 envNoneenviron 使用。

3.2 新版功能.

os.getegid()

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

Availability UNIX。

os.geteuid()

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

Availability UNIX。

os.getgid()

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

Availability UNIX。

os.getgrouplist(user, group)

返回组ID的列表 user 属于。如果 group 不在列表中,它包括在内;通常, group 从的密码记录中指定为组ID字段 user .

Availability UNIX。

3.3 新版功能.

os.getgroups()

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

Availability UNIX。

注解

在Mac OS X上, getgroups() 行为与其他Unix平台有些不同。如果python解释器的部署目标是 10.5 或更早, getgroups() 返回与当前用户进程关联的有效组ID的列表;此列表仅限于系统定义的条目数,通常为16条,并且可以通过调用 setgroups() 如果有适当的特权。如果生成的部署目标大于 10.5getgroups() 返回与进程的有效用户ID关联的用户的当前组访问列表;组访问列表可能在进程的整个生命周期内发生更改,不受对 setgroups() ,其长度不限于16。部署目标值, MACOSX_DEPLOYMENT_TARGET ,可通过 sysconfig.get_config_var() .

os.getlogin()

返回登录到进程控制终端的用户的名称。在大多数情况下,使用 getpass.getuser() 因为后者检查环境变量 LOGNAMEUSERNAME 找出用户是谁,然后返回 pwd.getpwuid(os.getuid())[0] 获取当前真实用户ID的登录名。

Availability :Unix、Windows。

os.getpgid(pid)

返回进程ID为的进程的进程组ID pid .如果 pid 为0,返回当前进程的进程组ID。

Availability UNIX。

os.getpgrp()

返回当前进程组的ID。

Availability UNIX。

os.getpid()

返回当前进程ID。

os.getppid()

返回父进程的进程ID。当父进程退出时,在Unix上,返回的ID是init进程(1)中的一个,在Windows上,它仍然是相同的ID,其他进程可能已经重用了该ID。

Availability :Unix、Windows。

在 3.2 版更改: 添加了对Windows的支持。

os.getpriority(which, who)

获取程序调度优先级。价值 哪一个 是其中之一 PRIO_PROCESSPRIO_PGRPPRIO_USERwho 是相对于 哪一个 (进程标识符 PRIO_PROCESS ,的进程组标识符 PRIO_PGRP 和的用户ID PRIO_USER )的零值 who 分别表示调用进程、调用进程的进程组或调用进程的实际用户ID。

Availability UNIX。

3.3 新版功能.

os.PRIO_PROCESS
os.PRIO_PGRP
os.PRIO_USER

的参数 getpriority()setpriority() 功能。

Availability UNIX。

3.3 新版功能.

os.getresuid()

返回一个元组(ruid、euid、suid),表示当前进程的真实、有效和保存的用户ID。

Availability UNIX。

3.2 新版功能.

os.getresgid()

返回一个元组(rgid、egid、sgid),表示当前进程的真实、有效和保存的组ID。

Availability UNIX。

3.2 新版功能.

os.getuid()

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

Availability UNIX。

os.initgroups(username, gid)

调用system initgroups()以使用指定用户名为成员的所有组以及指定的组ID初始化组访问列表。

Availability UNIX。

3.2 新版功能.

os.putenv(key, value)

设置名为的环境变量 keyvalue . 对环境的此类更改会影响从开始的子流程 os.system()popen()fork()execv() .

中项目的工作分配 os.environ 自动转换为相应的调用 putenv() ;但是,呼叫 putenv() 不要更新 os.environ ,因此,实际上最好分配到 os.environ .

注解

在一些平台上,包括FreeBSD和Mac OS X,设置 environ 可能导致内存泄漏。请参阅系统文档以了解 putenv() .

提出一个 auditing event os.putenv 带着论据 keyvalue .

在 3.9 版更改: 该功能现在始终可用。

os.setegid(egid)

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

Availability UNIX。

os.seteuid(euid)

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

Availability UNIX。

os.setgid(gid)

设置当前进程的组ID。

Availability UNIX。

os.setgroups(groups)

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

Availability UNIX。

注解

在Mac OS X上,长度为 group 不能超过系统定义的最大有效组ID数,通常为16。参见文档 getgroups() 对于不能通过调用setGroups()返回相同组列表集的情况。

os.setpgrp()

调用系统调用 setpgrp()setpgrp(0, 0) 取决于实现的版本(如果有)。有关语义,请参阅Unix手册。

Availability UNIX。

os.setpgid(pid, pgrp)

调用系统调用 setpgid() 使用ID设置流程的流程组ID pid 到ID为的流程组 pgrp . 有关语义,请参阅Unix手册。

Availability UNIX。

os.setpriority(which, who, priority)

设置程序调度优先级。价值 哪一个 是其中之一 PRIO_PROCESSPRIO_PGRPPRIO_USERwho 是相对于 哪一个 (进程标识符 PRIO_PROCESS ,的进程组标识符 PRIO_PGRP 和的用户ID PRIO_USER )的零值 who 分别表示调用进程、调用进程的进程组或调用进程的实际用户ID。 优先 是-20到19之间的值。默认优先级为0;优先级越低,调度越有利。

Availability UNIX。

3.3 新版功能.

os.setregid(rgid, egid)

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

Availability UNIX。

os.setresgid(rgid, egid, sgid)

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

Availability UNIX。

3.2 新版功能.

os.setresuid(ruid, euid, suid)

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

Availability UNIX。

3.2 新版功能.

os.setreuid(ruid, euid)

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

Availability UNIX。

os.getsid(pid)

调用系统调用 getsid() . 有关语义,请参阅Unix手册。

Availability UNIX。

os.setsid()

调用系统调用 setsid() . 有关语义,请参阅Unix手册。

Availability UNIX。

os.setuid(uid)

设置当前进程的用户ID。

Availability UNIX。

os.strerror(code)

返回与中的错误代码对应的错误消息 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 -硬件标识符

为了向后兼容,这个对象也是不可更改的,其行为类似于包含 sysnamenodenamereleaseversionmachine 按这个顺序。

一些系统截断 nodename 到8个字符或主要组件;获得主机名的更好方法是 socket.gethostname() 甚至 socket.gethostbyaddr(socket.gethostname()) .

Availability :最新的Unix风格。

在 3.3 版更改: 返回从元组更改为具有命名属性的类似于元组的对象的类型。

os.unsetenv(key)

取消设置(删除)名为 key . 对环境的此类更改会影响从开始的子流程 os.system()popen()fork()execv() .

删除中的项 os.environ 自动转换为相应的调用 unsetenv() ;但是,呼叫 unsetenv() 不要更新 os.environ ,因此实际上最好删除 os.environ .

提出一个 auditing event os.unsetenv 带着论证 key .

在 3.9 版更改: 该功能现在始终可用,并且在Windows上也可用。

文件对象创建

这些函数创建新的 file objects . (也见) open() 用于打开文件描述符。)

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

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

文件描述符操作

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

文件描述符是与当前进程打开的文件相对应的小整数。例如,标准输入通常是文件描述符0,标准输出是1,标准错误是2。然后,通过进程打开的更多文件将被分配为3、4、5等。“文件描述符”这个名称有点欺骗性;在UNIX平台上,套接字和管道也被文件描述符引用。

这个 fileno() 方法可用于获取与 file object 必要时。注意,直接使用文件描述符将绕过文件对象方法,忽略诸如数据的内部缓冲等方面。

os.close(fd)

关闭文件描述符 fd .

注解

此函数用于低级I/O,必须应用于由返回的文件描述符 os.open()pipe() . 关闭内置函数返回的“文件对象” open() 或通过 popen()fdopen() 使用它的 close() 方法。

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.copy_file_range(src, dst, count, offset_src=None, offset_dst=None)

拷贝 计数 来自文件描述符的字节 src ,从偏移开始 offset_src ,到文件描述符 dst ,从偏移开始 offset_dst .如果 offset_src 没有,那么 src 从当前位置读取;分别用于 offset_dst . 文件指向 srcdst 必须驻留在同一个文件系统中,否则 OSError 提出与 errno 设置为 errno.EXDEV .

这个拷贝是在不增加从内核到用户空间再返回内核的数据传输成本的情况下完成的。另外,一些文件系统可以实现额外的优化。复制过程就像两个文件都以二进制方式打开一样。

返回值是复制的字节数。这可能小于请求的金额。

Availability :linux kernel>=4.5或glibc>=2.27。

3.8 新版功能.

os.device_encoding(fd)

返回描述与关联的设备编码的字符串 fd 如果它连接到终端;否则返回 None .

在Unix上,如果 Python UTF-8 Mode 已启用,则返回 'UTF-8' 而不是设备编码。

在 3.10 版更改: 在Unix上,该函数现在实现Python UTF-8模式。

os.dup(fd)

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

在Windows上,复制标准流(0:stdin、1:stdout、2:stderr)时,新的文件描述符是 inheritable .

在 3.4 版更改: 新的文件描述符现在不可继承。

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

重复的文件描述符 fdfd2 如有必要,先关闭后者。返回 fd2 . 新的文件描述符是 inheritable 默认或不可继承,如果 可继承的False .

在 3.4 版更改: 添加可选 可继承的 参数。

在 3.7 版更改: 返回 fd2 论成功。以前, None 总是返回。

os.fchmod(fd, mode)

更改由指定的文件模式 fd 到数字 mode . 查看文档 chmod() 对于可能的值 mode .从python 3.3开始,这相当于 os.chmod(fd, mode) .

提出一个 auditing event os.chmod 带着论据 pathmodedir_fd .

Availability UNIX。

os.fchown(fd, uid, gid)

更改由提供的文件的所有者和组ID fd 到数字 uidgid . 要保持其中一个ID不变,请将其设置为-1。见 chown() .从python 3.3开始,这相当于 os.chown(fd, uid, gid) .

提出一个 auditing event os.chown 带着论据 pathuidgiddir_fd .

Availability UNIX。

os.fdatasync(fd)

使用文件描述符强制写入文件 fd 到磁盘。不强制更新元数据。

Availability UNIX。

注解

此功能在MacOS上不可用。

os.fpathconf(fd, name)

返回与打开的文件相关的系统配置信息。 name 指定要检索的配置值;它可以是一个字符串,该字符串是定义的系统值的名称;这些名称在许多标准(posix.1、unix 95、unix 98和其他)中指定。有些平台还定义了其他名称。主机操作系统已知的名称在 pathconf_names 字典。对于未包含在该映射中的配置变量,传递一个整数 name 也可接受。

如果 name 是一个字符串,未知, ValueError 提高了。如果特定值 name 主机系统不支持,即使它包含在 pathconf_names ,一个 OSError 提出与 errno.EINVAL 错误号。

从python 3.3开始,这相当于 os.pathconf(fd, name) .

Availability UNIX。

os.fstat(fd)

获取文件描述符的状态 fd . 返回A stat_result 对象。

从python 3.3开始,这相当于 os.stat(fd) .

参见

这个 stat() 功能。

os.fstatvfs(fd)

返回有关包含与文件描述符关联的文件的文件系统的信息 fd ,像 statvfs() .从python 3.3开始,这相当于 os.statvfs(fd) .

Availability UNIX。

os.fsync(fd)

使用文件描述符强制写入文件 fd 到磁盘。在Unix上,这将调用本机 fsync() 功能;在Windows上,MS _commit() 功能。

如果您从一个缓冲的python开始 file object f 首先做 f.flush() 然后做 os.fsync(f.fileno()) ,以确保与 f 写入磁盘。

Availability :Unix、Windows。

os.ftruncate(fd, length)

截断与文件描述符对应的文件 fd 所以最多 长度 字节大小。从python 3.3开始,这相当于 os.truncate(fd, length) .

提出一个 auditing event os.truncate 带着论据 fdlength .

Availability :Unix、Windows。

在 3.5 版更改: 添加了对Windows的支持

os.get_blocking(fd)

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

也见 set_blocking()socket.socket.setblocking() .

Availability UNIX。

3.5 新版功能.

os.isatty(fd)

返回 True 如果文件描述符 fd 打开并连接到TTY(类似)设备,否则 False .

os.lockf(fd, cmd, len)

在打开的文件描述符上应用、测试或删除posix锁。 fd 是打开的文件描述符。 cmd 指定要使用的命令-其中一个 F_LOCKF_TLOCKF_ULOCKF_TEST . len 指定要锁定的文件部分。

提出一个 auditing event os.lockf 带着论据 fdcmdlen .

Availability UNIX。

3.3 新版功能.

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

指定操作的标志 lockf() 将采取。

Availability UNIX。

3.3 新版功能.

os.lseek(fd, pos, how)

设置文件描述符的当前位置 fd 定位 pos 通过修改 howSEEK_SET0 设置相对于文件开头的位置; SEEK_CUR1 相对于当前位置进行设置; SEEK_END2 相对于文件结尾进行设置。从开始返回新的光标位置(以字节为单位)。

os.SEEK_SET
os.SEEK_CUR
os.SEEK_END

参数到 lseek() 功能。它们的值分别为0、1和2。

3.3 新版功能: 一些操作系统可以支持其他值,比如 os.SEEK_HOLEos.SEEK_DATA .

os.open(path, flags, mode=511, *, dir_fd=None)

打开文件 path 并根据 flags 可能它的模式是根据 mode . 计算时 mode ,首先屏蔽当前umask值。返回新打开文件的文件描述符。新的文件描述符是 non-inheritable .

有关标志和模式值的描述,请参阅C运行时文档;标志常量(如 O_RDONLYO_WRONLY )在中定义 os 模块。尤其是在Windows添加 O_BINARY 需要以二进制模式打开文件。

此功能可以支持 paths relative to directory descriptorsdir_fd 参数。

提出一个 auditing event open 带着论据 pathmodeflags .

在 3.4 版更改: 新的文件描述符现在不可继承。

注解

此功能用于低级I/O。正常使用时,请使用内置功能 open() ,返回 file object 具有 read()write() 方法(以及更多)。要在文件对象中封装文件描述符,请使用 fdopen() .

3.3 新版功能: 这个 dir_fd 参数。

在 3.5 版更改: 如果系统调用被中断且信号处理程序没有引发异常,则函数现在将重试系统调用,而不是引发 InterruptedError 例外(见) PEP 475 理由)。

在 3.6 版更改: 接受一 path-like object .

以下常量是 flags 参数 open() 功能。它们可以使用按位或运算符组合 | . 其中一些在所有平台上都不可用。有关它们的可用性和使用说明,请参阅 open(2) Unix上的手动页面或 the MSDN 在Windows上。

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_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
os.O_SHLOCK
os.O_EXLOCK

上述常量是扩展,如果C库没有定义,则不存在。

在 3.4 版更改: 添加 O_PATH 在支持它的系统上。添加 O_TMPFILE ,仅在Linux内核3.11或更高版本上可用。

os.openpty()

打开一个新的伪终端对。返回一对文件描述符 (master, slave) 分别用于PTY和TTY。新的文件描述符是 non-inheritable . 对于(稍微)更便携的方法,请使用 pty 模块。

Availability :一些风格的Unix。

在 3.4 版更改: 新的文件描述符现在不可继承。

os.pipe()

创建管道。返回一对文件描述符 (r, w) 分别用于读写。新的文件描述符是 non-inheritable .

Availability :Unix、Windows。

在 3.4 版更改: 新的文件描述符现在不可继承。

os.pipe2(flags)

使用创建管道 flags 按原子顺序设置。 flags 可以通过将以下一个或多个值组合在一起来构造: O_NONBLOCKO_CLOEXEC . 返回一对文件描述符 (r, w) 分别用于读写。

Availability :一些风格的Unix。

3.3 新版功能.

os.posix_fallocate(fd, offset, len)

确保为指定的文件分配足够的磁盘空间 fd 从开始 抵消 继续 len 字节。

Availability UNIX。

3.3 新版功能.

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

声明以特定模式访问数据的意图,从而允许内核进行优化。建议适用于由指定的文件区域 fd 开始于 抵消 继续 len 字节。 建议 是其中之一 POSIX_FADV_NORMALPOSIX_FADV_SEQUENTIALPOSIX_FADV_RANDOMPOSIX_FADV_NOREUSEPOSIX_FADV_WILLNEEDPOSIX_FADV_DONTNEED .

Availability 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() 指定可能使用的访问模式。

Availability UNIX。

3.3 新版功能.

os.pread(fd, n, offset)

至多阅读 n 来自文件描述符的字节 fd 位置 抵消 ,保持文件偏移量不变。

返回包含已读取字节的字节串。如果文件的结尾被引用 fd 已到达,返回空字节对象。

Availability UNIX。

3.3 新版功能.

os.preadv(fd, buffers, offset, flags=0)

从文件描述符读取 fd 位置 抵消 变为可变的 bytes-like objects 缓冲器 ,保持文件偏移量不变。将数据传输到每个缓冲区,直到数据满为止,然后按顺序移动到下一个缓冲区以保存其余数据。

flags参数包含一个位或零个或多个以下标志:

返回实际读取的字节总数,它可以小于所有对象的总容量。

操作系统可能会设置限制 (sysconf() 价值 'SC_IOV_MAX' )可使用的缓冲区数量。

结合的功能 os.readv()os.pread() .

Availability :Linux 2.6.30及更新版本、FreeBSD 6.0及更新版本、OpenBSD 2.7及更新版本、AIX7.1及更新版本。使用标志需要Linux 4.6或更高版本。

3.7 新版功能.

os.RWF_NOWAIT

不要等待不立即可用的数据。如果指定了此标志,则如果系统调用必须从后备存储器中读取数据或等待锁定,它将立即返回。

如果某些数据读取成功,它将返回读取的字节数。如果没有读取任何字节,它将返回 -1 并将errno设置为 errno.EAGAIN .

Availability :Linux 4.14及更高版本。

3.7 新版功能.

os.RWF_HIPRI

高优先级读/写。允许基于块的文件系统使用设备的轮询,这提供了较低的延迟,但可能会使用其他资源。

目前,在Linux上,此功能仅在使用 O_DIRECT flag。

Availability :Linux 4.6及更高版本。

3.7 新版功能.

os.pwrite(fd, str, offset)

写入字节字符串 str 到文件描述符 fd 在位置 抵消 ,保持文件偏移量不变。

返回实际写入的字节数。

Availability UNIX。

3.3 新版功能.

os.pwritev(fd, buffers, offset, flags=0)

写下 缓冲器 内容到文件描述符 fd 在偏移量 抵消 ,保持文件偏移量不变。 缓冲器 必须是一个序列 bytes-like objects .缓冲区按数组顺序处理。第一个缓冲区的全部内容在进入第二个缓冲区之前写入,依此类推。

flags参数包含一个位或零个或多个以下标志:

返回实际写入的字节总数。

操作系统可能会设置限制 (sysconf() 价值 'SC_IOV_MAX' )可使用的缓冲区数量。

结合的功能 os.writev()os.pwrite() .

Availability :Linux 2.6.30及更新版本、FreeBSD 6.0及更新版本、OpenBSD 2.7及更新版本、AIX7.1及更新版本。使用标志需要Linux 4.7或更高版本。

3.7 新版功能.

os.RWF_DSYNC

提供相当于 O_DSYNC os.open() 旗帜。此标志效果仅适用于系统调用写入的数据范围。

Availability :Linux 4.7及更高版本。

3.7 新版功能.

os.RWF_SYNC

提供相当于 O_SYNC os.open() 旗帜。此标志效果仅适用于系统调用写入的数据范围。

Availability :Linux 4.7及更高版本。

3.7 新版功能.

os.RWF_APPEND

提供相当于 O_APPEND os.open() 旗帜。此标志仅对 os.pwritev() ,其效果仅适用于系统调用写入的数据范围。这个 抵消 参数不影响写入操作;数据总是附加到文件的末尾。但是,如果 抵消 论证是 -1 ,当前文件 抵消 已更新。

Availability :Linux 4.16及更新版本。

3.10 新版功能.

os.read(fd, n)

至多阅读 n 来自文件描述符的字节 fd .

返回包含已读取字节的字节串。如果文件的结尾被引用 fd 已到达,返回空字节对象。

注解

此函数用于低级I/O,必须应用于由返回的文件描述符 os.open()pipe() . 读取内置函数返回的“文件对象” open() 或通过 popen()fdopen()sys.stdin 使用它的 read()readline() 方法。

在 3.5 版更改: 如果系统调用被中断且信号处理程序没有引发异常,则函数现在将重试系统调用,而不是引发 InterruptedError 例外(见) PEP 475 理由)。

os.sendfile(out_fd, in_fd, offset, count)
os.sendfile(out_fd, in_fd, offset, count, headers=(), trailers=(), flags=0)

拷贝 计数 来自文件描述符的字节 in_fd 到文件描述符 out_fd 开始于 抵消 . 返回发送的字节数。当到达EOF时返回 0 .

第一个函数表示法由定义 sendfile() .

在Linux上,如果 抵消 给出作为 None ,从当前位置读取字节 in_fd 以及 in_fd 已更新。

第二种情况可用于Mac OS X和FreeBSD,其中 报头拖车 是在数据之前和之后写入的任意缓冲区序列, in_fd 是书面的。它返回与第一个案例相同的结果。

在Mac OS X和FreeBSD上,值为 0 对于 计数 指定发送到 in_fd 达到。

所有平台支撑插座组件 out_fd 文件描述符和一些平台也允许其他类型(例如常规文件、管道)。

跨平台应用程序不应使用 headers拖车flags 参数。

Availability UNIX。

注解

对于更高级别的封装 sendfile()socket.socket.sendfile() .

3.3 新版功能.

在 3.9 版更改: 参数 outin 重命名为 out_fdin_fd .

os.set_blocking(fd, blocking)

设置指定文件描述符的阻止模式。设置 O_NONBLOCK 如果阻塞为 False ,否则清除标记。

也见 get_blocking()socket.socket.setblocking() .

Availability UNIX。

3.5 新版功能.

os.SF_NODISKIO
os.SF_MNOWAIT
os.SF_SYNC

参数到 sendfile() 函数,如果实现支持它们。

Availability UNIX。

3.3 新版功能.

os.splice(src, dst, count, offset_src=None, offset_dst=None)

转接 计数 文件描述符中的字节 src ,从偏移开始 offset_src ,到文件描述符 dst ,从偏移开始 offset_dst 。至少有一个文件描述符必须引用管道。如果 offset_src 都不是,那么 src 是从当前位置读取的;分别针对 offset_dst 。与引用管道的文件描述符关联的偏移量必须为 None 。指向的文件 srcdst 必须驻留在同一文件系统中,否则将引发 OSError 是通过以下方式提高的 errno 设置为 errno.EXDEV

这个拷贝是在不增加从内核到用户空间再返回内核的数据传输成本的情况下完成的。另外,一些文件系统可以实现额外的优化。复制过程就像两个文件都以二进制方式打开一样。

成功完成后,返回与管道拼接的字节数或从管道拼接的字节数。返回值0表示输入结束。如果 src 引用管道,则这意味着没有要传输的数据,这对挡路来说没有意义,因为管道的写入端没有连接到写入器。

Availability :linux kernel>=2.6.17和glibc>=2.5

3.10 新版功能.

os.SPLICE_F_MOVE
os.SPLICE_F_NONBLOCK
os.SPLICE_F_MORE

3.10 新版功能.

os.readv(fd, buffers)

从文件描述符读取 fd 变成一些可变的 bytes-like objects 缓冲器 . 将数据传输到每个缓冲区,直到数据满为止,然后按顺序移动到下一个缓冲区以保存其余数据。

返回实际读取的字节总数,它可以小于所有对象的总容量。

操作系统可能会设置限制 (sysconf() 价值 'SC_IOV_MAX' )可使用的缓冲区数量。

Availability UNIX。

3.3 新版功能.

os.tcgetpgrp(fd)

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

Availability UNIX。

os.tcsetpgrp(fd, pg)

设置与终端关联的进程组 fd (由返回的打开文件描述符) os.open()pg .

Availability UNIX。

os.ttyname(fd)

返回指定与文件描述符关联的终端设备的字符串 fd . 如果 fd 未与终端设备关联,引发异常。

Availability UNIX。

os.write(fd, str)

写入字节字符串 str 到文件描述符 fd .

返回实际写入的字节数。

注解

此函数用于低级I/O,必须应用于由返回的文件描述符 os.open()pipe() . 写入内置函数返回的“文件对象” open() 或通过 popen()fdopen()sys.stdoutsys.stderr 使用它的 write() 方法。

在 3.5 版更改: 如果系统调用被中断且信号处理程序没有引发异常,则函数现在将重试系统调用,而不是引发 InterruptedError 例外(见) PEP 475 理由)。

os.writev(fd, buffers)

写下的内容 缓冲器 到文件描述符 fd . 缓冲器 必须是一个序列 bytes-like objects .缓冲区按数组顺序处理。第一个缓冲区的全部内容在进入第二个缓冲区之前写入,依此类推。

返回实际写入的字节总数。

操作系统可能会设置限制 (sysconf() 价值 'SC_IOV_MAX' )可使用的缓冲区数量。

Availability UNIX。

3.3 新版功能.

查询终端大小

3.3 新版功能.

os.get_terminal_size(fd=STDOUT_FILENO)

将终端窗口的大小返回为 (columns, lines) 类型元组 terminal_size .

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

如果文件描述符未连接到终端, OSError 提高了。

shutil.get_terminal_size() 是通常应该使用的高级功能, os.get_terminal_size 是低级实现。

Availability :Unix、Windows。

class os.terminal_size

元组的一个子类,包含 (columns, lines) 终端窗口大小。

columns

终端窗口的宽度(字符)。

lines

终端窗口的高度(以字符为单位)。

文件描述符的继承

3.4 新版功能.

文件描述符有一个“可继承”标志,该标志指示文件描述符是否可以由子进程继承。自Python3.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)

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

Availability :Windows。

os.set_handle_inheritable(handle, inheritable)

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

Availability :Windows。

文件和目录

在某些UNIX平台上,这些功能中的许多都支持以下一个或多个功能:

  • 指定文件描述符: 通常 path 为中的函数提供的参数 os 模块必须是指定文件路径的字符串。但是,一些函数现在也可以接受其打开的文件描述符 path 参数。然后,该函数将对描述符所引用的文件进行操作。(对于POSIX系统,python将调用前缀为 f (例如呼叫 fchdir 而不是 chdir

    你可以检查一下 path 可以指定为平台上特定函数的文件描述符,使用 os.supports_fd . 如果此功能不可用,使用它将引发 NotImplementedError .

    如果函数也支持 dir_fdfollow_symlinks 参数,在提供 path 作为文件描述符。

  • 相对于目录描述符的路径: 如果 dir_fd 不是 None ,它应该是一个引用目录的文件描述符,并且要操作的路径应该是相对的;然后路径将是相对于该目录的。如果路径是绝对的, dir_fd 被忽略。(对于POSIX系统,python将使用 at 后缀和可能的前缀 f (例如呼叫 faccessat 而不是 access

    你可以检查一下 dir_fd 支持您的平台上的特定功能,使用 os.supports_dir_fd . 如果它不可用,使用它将提高 NotImplementedError .

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

使用真实的uid/gid测试访问 path . 请注意,大多数操作将使用有效的uid/gid,因此可以在suid/sgid环境中使用此例程来测试调用用户是否具有对 path . mode 应该是 F_OK 来测试 path 或者它可以包含一个或多个 R_OKW_OKX_OK 测试权限。返回 True 如果允许访问, False 如果没有。参见Unix手册页 access(2) 更多信息。

此函数可以支持指定 paths relative to directory descriptorsnot following symlinks .

如果 effective_idsTrueaccess() 将使用有效的uid/gid而不是真正的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()

注解

即使在以下情况下,I/O操作也可能失败 access() 表示它们会成功,特别是对网络文件系统的操作,这些文件系统的权限语义可能超出了通常的POSIX权限位模型。

在 3.3 版更改: 增加了 dir_fdeffective_idsfollow_symlinks 参数。

在 3.6 版更改: 接受一 path-like object .

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

要作为传递的值 mode 参数 access() 测试 path ,分别。

os.chdir(path)

将当前工作目录更改为 path .

此功能可以支持 specifying a file descriptor . 描述符必须指向打开的目录,而不是打开的文件。

此功能可以提升 OSError 和子类,如 FileNotFoundErrorPermissionErrorNotADirectoryError .

提出一个 auditing event os.chdir 带着论证 path .

3.3 新版功能: 添加了对指定的支持 path 在某些平台上作为文件描述符。

在 3.6 版更改: 接受一 path-like object .

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

设置的标志 path 到数字 flags . flags 可以采用以下值的组合(按位或)(如 stat 模块):

此功能可以支持 not following symlinks .

提出一个 auditing event os.chflags 带着论据 pathflags .

Availability UNIX。

3.3 新版功能: 这个 follow_symlinks 参数。

在 3.6 版更改: 接受一 path-like object .

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

更改的模式 path 到数字 mode . mode 可以采用以下值之一(如 stat 模块)或它们的位或或组合:

此功能可以支持 specifying a file descriptorpaths relative to directory descriptorsnot following symlinks .

注解

尽管Windows支持 chmod() ,您只能用它设置文件的只读标志(通过 stat.S_IWRITEstat.S_IREAD 常量或相应的整数值)。忽略所有其他位。

提出一个 auditing event os.chmod 带着论据 pathmodedir_fd .

3.3 新版功能: 添加了对指定的支持 path 作为打开的文件描述符, dir_fdfollow_symlinks 参数。

在 3.6 版更改: 接受一 path-like object .

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

更改的所有者和组ID path 到数字 uidgid . 要保持其中一个ID不变,请将其设置为-1。

此功能可以支持 specifying a file descriptorpaths relative to directory descriptorsnot following symlinks .

shutil.chown() 对于接受除数字ID之外的名称的高级函数。

提出一个 auditing event os.chown 带着论据 pathuidgiddir_fd .

Availability UNIX。

3.3 新版功能: 添加了对指定的支持 path 作为打开的文件描述符, dir_fdfollow_symlinks 参数。

在 3.6 版更改: 支持一 path-like object .

os.chroot(path)

将当前进程的根目录更改为 path .

Availability UNIX。

在 3.6 版更改: 接受一 path-like object .

os.fchdir(fd)

将当前工作目录更改为文件描述符表示的目录 fd . 描述符必须指向打开的目录,而不是打开的文件。从python 3.3开始,这相当于 os.chdir(fd) .

提出一个 auditing event os.chdir 带着论证 path .

Availability UNIX。

os.getcwd()

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

os.getcwdb()

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

在 3.8 版更改: 函数现在在Windows上使用UTF-8编码,而不是ANSI代码页:请参见 PEP 529 理由是。在Windows上不再推荐使用该函数。

os.lchflags(path, flags)

设置的标志 path 到数字 flags ,像 chflags() ,但不要使用符号链接。从python 3.3开始,这相当于 os.chflags(path, flags, follow_symlinks=False) .

提出一个 auditing event os.chflags 带着论据 pathflags .

Availability UNIX。

在 3.6 版更改: 接受一 path-like object .

os.lchmod(path, mode)

更改的模式 path 到数字 mode . 如果路径是符号链接,则会影响符号链接而不是目标。查看文档 chmod() 对于可能的值 mode .从python 3.3开始,这相当于 os.chmod(path, mode, follow_symlinks=False) .

提出一个 auditing event os.chmod 带着论据 pathmodedir_fd .

Availability UNIX。

在 3.6 版更改: 接受一 path-like object .

os.lchown(path, uid, gid)

更改的所有者和组ID path 到数字 uidgid . 此函数不会遵循符号链接。从python 3.3开始,这相当于 os.chown(path, uid, gid, follow_symlinks=False) .

提出一个 auditing event os.chown 带着论据 pathuidgiddir_fd .

Availability UNIX。

在 3.6 版更改: 接受一 path-like object .

创建指向的硬链接 src 已命名 dst .

此函数可以支持指定 src_dir_fd 和/或 dst_dir_fd 供应 paths relative to directory descriptorsnot following symlinks .

提出一个 auditing event os.link 带着论据 srcdstsrc_dir_fddst_dir_fd .

Availability :Unix、Windows。

在 3.2 版更改: 添加了Windows支持。

3.3 新版功能: 增加了 src_dir_fddst_dir_fdfollow_symlinks 参数。

在 3.6 版更改: 接受一 path-like object 对于 srcdst .

os.listdir(path='.')

返回一个列表,其中包含由给定的目录中的条目名称 path . 列表是任意顺序的,不包括特殊条目 '.''..' 即使它们出现在目录中。如果在调用此函数期间从目录中删除或添加了一个文件,则未指定是否包含该文件的名称。

path 可能是 path-like object . 如果 path 属于类型 bytes (直接或间接通过 PathLike 接口),返回的文件名也将是 bytes ;在所有其他情况下,它们的类型为 str .

此功能还可以支持 specifying a file descriptor ;文件描述符必须引用目录。

提出一个 auditing event os.listdir 带着论证 path .

注解

编码 str 文件名到 bytes 使用 fsencode() .

参见

这个 scandir() 函数返回目录条目和文件属性信息,为许多常见的用例提供更好的性能。

在 3.2 版更改: 这个 path 参数变为可选。

3.3 新版功能: 添加了对指定的支持 path 作为打开的文件描述符。

在 3.6 版更改: 接受一 path-like object .

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

执行相当于 lstat() 给定路径上的系统调用。类似 stat() ,但不遵循符号链接。返回A stat_result 对象。

在不支持符号链接的平台上,这是的别名 stat() .

从python 3.3开始,这相当于 os.stat(path, dir_fd=dir_fd, follow_symlinks=False) .

此功能还可以支持 paths relative to directory descriptors .

参见

这个 stat() 功能。

在 3.2 版更改: 添加了对Windows6.0(Vista)符号链接的支持。

在 3.3 版更改: 增加了 dir_fd 参数。

在 3.6 版更改: 接受一 path-like object 对于 srcdst .

在 3.8 版更改: 在Windows上,现在打开表示另一个路径(名称代理项)的重新分析点,包括符号链接和目录连接。其他类型的重分析点由操作系统解析为 stat() .

os.mkdir(path, mode=511, *, dir_fd=None)

创建名为的目录 path 使用数字模式 mode .

如果目录已经存在, FileExistsError 提高了。

在某些系统上, mode 被忽略。在使用它的地方,当前umask值首先被屏蔽掉。如果不是最后9位(即八进制表示的最后3位 mode )它们的意义取决于平台。在某些平台上,它们被忽略,您应该调用 chmod() 明确设置它们。

此功能还可以支持 paths relative to directory descriptors .

也可以创建临时目录;请参见 tempfile 模块的 tempfile.mkdtemp() 功能。

提出一个 auditing event os.mkdir 带着论据 pathmodedir_fd .

3.3 新版功能: 这个 dir_fd 参数。

在 3.6 版更改: 接受一 path-like object .

os.makedirs(name, mode=511, exist_ok=False)

递归目录创建函数。类似于 mkdir() ,但会生成包含叶目录所需的所有中间级目录。

这个 mode 参数传递给 mkdir() 用于创建叶目录;请参见 the mkdir() description 解释的方式。要设置任何新创建的父目录的文件权限位,可以在调用之前设置umask makedirs() . 现有父目录的文件权限位没有更改。

如果 exist_okFalse (默认),一个 FileExistsError 如果目标目录已存在,则引发。

注解

makedirs() 如果要创建的路径元素包括 pardir (例如,“.”在Unix系统上)。

此函数正确处理UNC路径。

提出一个 auditing event os.mkdir 带着论据 pathmodedir_fd .

3.2 新版功能: 这个 exist_ok 参数。

在 3.4.1 版更改: 在python 3.4.1之前,如果 exist_okTrue 目录已经存在, makedirs() 如果 mode 与现有目录的模式不匹配。由于这种行为不可能安全地实现,所以在Python3.4.1中删除了它。见 bpo-21082 .

在 3.6 版更改: 接受一 path-like object .

在 3.7 版更改: 这个 mode 参数不再影响新创建的中间级目录的文件权限位。

os.mkfifo(path, mode=438, *, dir_fd=None)

创建名为 path 使用数字模式 mode . 当前umask值首先从模式中屏蔽。

此功能还可以支持 paths relative to directory descriptors .

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

Availability UNIX。

3.3 新版功能: 这个 dir_fd 参数。

在 3.6 版更改: 接受一 path-like object .

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

创建名为的文件系统节点(文件、设备特殊文件或命名管道) path . mode 指定要使用的权限和要创建的节点类型,并将其与以下节点之一组合(按位或) stat.S_IFREGstat.S_IFCHRstat.S_IFBLKstat.S_IFIFO (这些常量在 stat )为了 stat.S_IFCHRstat.S_IFBLK装置 定义新创建的设备特殊文件(可能使用 os.makedev() ,否则将被忽略。

此功能还可以支持 paths relative to directory descriptors .

Availability UNIX。

3.3 新版功能: 这个 dir_fd 参数。

在 3.6 版更改: 接受一 path-like object .

os.major(device)

从原始设备号(通常是 st_devst_rdev 场从 stat

os.minor(device)

从原始设备号(通常是 st_devst_rdev 场从 stat

os.makedev(major, minor)

从主设备号和次设备号组成一个原始设备号。

os.pathconf(path, name)

返回与命名文件相关的系统配置信息。 name 指定要检索的配置值;它可以是一个字符串,该字符串是定义的系统值的名称;这些名称在许多标准(posix.1、unix 95、unix 98和其他)中指定。有些平台还定义了其他名称。主机操作系统已知的名称在 pathconf_names 字典。对于未包含在该映射中的配置变量,传递一个整数 name 也可接受。

如果 name 是一个字符串,未知, ValueError 提高了。如果特定值 name 主机系统不支持,即使它包含在 pathconf_names ,一个 OSError 提出与 errno.EINVAL 错误号。

此功能可以支持 specifying a file descriptor .

Availability UNIX。

在 3.6 版更改: 接受一 path-like object .

os.pathconf_names

字典映射名称被接受 pathconf()fpathconf() 到主机操作系统为这些名称定义的整数值。这可用于确定系统已知的名称集。

Availability UNIX。

返回表示符号链接指向的路径的字符串。结果可以是绝对路径名或相对路径名;如果是相对路径名,则可以使用 os.path.join(os.path.dirname(path), result) .

如果 path 是字符串对象(直接或间接通过 PathLike 接口),结果也将是一个字符串对象,调用可能会引发一个unicodedecode错误。如果 path 是字节对象(直接或间接),结果将是字节对象。

此功能还可以支持 paths relative to directory descriptors .

尝试解析可能包含链接的路径时,请使用 realpath() 正确处理递归和平台差异。

Availability :Unix、Windows。

在 3.2 版更改: 添加了对Windows6.0(Vista)符号链接的支持。

3.3 新版功能: 这个 dir_fd 参数。

在 3.6 版更改: 接受一 path-like object 在UNIX上。

在 3.8 版更改: 接受一 path-like object 和Windows上的bytes对象。

在 3.8 版更改: 添加了对目录连接的支持,并更改为返回替换路径(通常包括 \\?\ 前缀)而不是先前返回的可选“打印名”字段。

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

删除(删除)文件 path . 如果 path 是一个目录,一个 IsADirectoryError 提高了。使用 rmdir() 删除目录。

此功能可以支持 paths relative to directory descriptors .

在Windows上,试图删除正在使用的文件会引发异常;在UNIX上,目录项被删除,但分配给该文件的存储在原始文件不再使用之前不可用。

此函数在语义上与 unlink() .

提出一个 auditing event os.remove 带着论据 pathdir_fd .

3.3 新版功能: 这个 dir_fd 参数。

在 3.6 版更改: 接受一 path-like object .

os.removedirs(name)

递归删除目录。作品像 rmdir() 但是,如果成功删除了叶目录, removedirs() 尝试依次删除中提到的每个父目录 path 直到出现错误(这被忽略,因为它通常意味着父目录不是空的)。例如, os.removedirs('foo/bar/baz') 将首先删除目录 'foo/bar/baz' ,然后移除 'foo/bar''foo' 如果它们是空的。引发 OSError 如果无法成功删除叶目录。

提出一个 auditing event os.remove 带着论据 pathdir_fd .

在 3.6 版更改: 接受一 path-like object .

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

重命名文件或目录 srcdst .如果 dst 存在,操作将失败 OSError 许多情况下的子类:

在Windows上,如果 dst 存在一个 FileExistsError 总是被提升。

关于UNIX,如果 src 是一个文件 dst 是一个目录,反之亦然,一个 IsADirectoryError 或A NotADirectoryError 将分别提升。如果两者都是目录和 dst 是空的, dst 将被静默替换。如果 dst 是一个非空目录, OSError 被提升。如果两者都是文件, dst 如果用户有权限,它将自动替换。如果 srcdst 在不同的文件系统上。如果成功,重命名将是一个原子操作(这是一个POSIX要求)。

此函数可以支持指定 src_dir_fd 和/或 dst_dir_fd 供应 paths relative to directory descriptors .

如果要覆盖目标的跨平台,请使用 replace() .

提出一个 auditing event os.rename 带着论据 srcdstsrc_dir_fddst_dir_fd .

3.3 新版功能: 这个 src_dir_fddst_dir_fd 参数。

在 3.6 版更改: 接受一 path-like object 对于 srcdst .

os.renames(old, new)

递归目录或文件重命名函数。作品像 rename() ,但首先尝试创建任何中间目录以使新路径名良好。重命名后,将使用 removedirs() .

注解

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

提出一个 auditing event os.rename 带着论据 srcdstsrc_dir_fddst_dir_fd .

在 3.6 版更改: 接受一 path-like object 对于 oldnew .

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

重命名文件或目录 srcdst . 如果 dst 是一个目录, OSError 将被引发。如果 dst 存在并且是一个文件,如果用户有权限,它将自动替换。如果 srcdst 在不同的文件系统上。如果成功,重命名将是一个原子操作(这是一个POSIX要求)。

此函数可以支持指定 src_dir_fd 和/或 dst_dir_fd 供应 paths relative to directory descriptors .

提出一个 auditing event os.rename 带着论据 srcdstsrc_dir_fddst_dir_fd .

3.3 新版功能.

在 3.6 版更改: 接受一 path-like object 对于 srcdst .

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

删除目录 path .如果目录不存在或不为空,则 FileNotFoundErrorOSError 分别升高。为了删除整个目录树, shutil.rmtree() 可以使用。

此功能可以支持 paths relative to directory descriptors .

提出一个 auditing event os.rmdir 带着论据 pathdir_fd .

3.3 新版功能: 这个 dir_fd 参数。

在 3.6 版更改: 接受一 path-like object .

os.scandir(path='.')

返回的迭代器 os.DirEntry 与给定目录中的条目相对应的对象 path . 条目以任意顺序生成,特殊条目 '.''..' 不包括在内。如果在创建迭代器后将文件从目录中删除或添加到目录中,则未指定是否包含该文件的条目。

使用 scandir() 而不是 listdir() 可以显著提高还需要文件类型或文件属性信息的代码的性能,因为 os.DirEntry 如果操作系统在扫描目录时提供此信息,则对象将公开此信息。所有 os.DirEntry 方法可以执行系统调用,但 is_dir()is_file() 通常只需要系统调用符号链接; os.DirEntry.stat() 在UNIX上总是需要系统调用,但在Windows上只需要一个用于符号链接。

path 可能是 path-like object . 如果 path 属于类型 bytes (直接或间接通过 PathLike 接口)的类型 namepath 每个的属性 os.DirEntrybytes ;在所有其他情况下,它们的类型为 str .

此功能还可以支持 specifying a file descriptor ;文件描述符必须引用目录。

提出一个 auditing event os.scandir 带着论证 path .

这个 scandir() 迭代器支持 context manager 协议和具有以下方法:

scandir.close()

关闭迭代器并释放获取的资源。

当迭代器耗尽或被垃圾收集时,或者在迭代器期间发生错误时,将自动调用此函数。但是,建议显式调用它或使用 with 语句。

3.6 新版功能.

下面的示例显示了 scandir() 显示给定目录中的所有文件(不包括目录) path 这不是从 '.' . 这个 entry.is_file() 调用通常不会进行额外的系统调用::

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

注解

在基于Unix的系统上, scandir() 使用系统的 opendir()readdir() 功能。在Windows上,它使用win32 FindFirstFileWFindNextFileW 功能。

3.5 新版功能.

3.6 新版功能: 增加了对 context manager 协议和 close() 方法。如果A scandir() 迭代器既没有耗尽也没有显式关闭 ResourceWarning 将在其析构函数中发出。

函数接受 path-like object .

在 3.7 版更改: 为添加了支持 file descriptors 在UNIX上。

class os.DirEntry

对象生成者 scandir() 公开目录项的文件路径和其他文件属性。

scandir() 将尽可能多地提供这些信息,而不进行额外的系统调用。当A stat()lstat() 系统调用完成后, os.DirEntry 对象将缓存结果。

os.DirEntry 实例不打算存储在长寿命的数据结构中;如果您知道文件元数据已更改或调用后经过很长时间 scandir() ,调用 os.stat(entry.path) 获取最新信息。

因为 os.DirEntry 方法可以进行操作系统调用,它们还可以 OSError . 如果需要对错误进行非常精细的控制,可以 OSError 当调用其中一个 os.DirEntry 方法和处理。

直接用作 path-like objectos.DirEntry 实现 PathLike 接口。

属性和方法 os.DirEntry 实例如下:

name

条目的基本文件名,相对于 scandir() path 参数。

这个 name 属性将为 bytes 如果 scandir() path 参数的类型为 bytesstr 否则。使用 fsdecode() 解码字节文件名。

path

条目的完整路径名:相当于 os.path.join(scandir_path, entry.name) 在哪里? scandir_pathscandir() path 参数。只有当 scandir() path 参数是绝对的。如果 scandir() path 参数是一个 file descriptor , the path 属性与 name 属性。

这个 path 属性将为 bytes 如果 scandir() path 参数的类型为 bytesstr 否则。使用 fsdecode() 解码字节文件名。

inode()

返回条目的inode编号。

结果缓存在 os.DirEntry 对象。使用 os.stat(entry.path, follow_symlinks=False).st_ino 获取最新信息。

在第一个未缓存的调用中,需要在Windows上进行系统调用,但在UNIX上不需要。

is_dir(*, follow_symlinks=True)

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

如果 follow_symlinksFalse 返回 True 仅当此条目是目录时(不带符号链接);返回 False 如果条目是任何其他类型的文件,或者不再存在。

结果缓存在 os.DirEntry 对象,具有单独的缓存 follow_symlinks TrueFalse . 调用 os.stat() 随着 stat.S_ISDIR() 获取最新信息。

在第一个未缓存的调用中,大多数情况下不需要系统调用。具体地说,对于非符号链接,Windows或Unix都不需要系统调用,除非在某些Unix文件系统(如网络文件系统)上返回 dirent.d_type == DT_UNKNOWN .如果条目是symlink,则需要系统调用才能跟踪symlink,除非 follow_symlinksFalse .

这种方法可以提高 OSError ,如 PermissionError ,但是 FileNotFoundError 被捕获而不被引发。

is_file(*, follow_symlinks=True)

返回 True 如果此条目是指向文件的文件或符号链接;返回 False 如果条目是或指向目录或其他非文件条目,或者它不再存在。

如果 follow_symlinksFalse 返回 True 仅当此条目为文件时(不带以下符号链接);返回 False 如果条目是目录或其他非文件条目,或者不再存在。

结果缓存在 os.DirEntry 对象。缓存、系统调用和引发的异常 is_dir() .

返回 True 如果此条目是符号链接(即使已断开);返回 False 如果条目指向一个目录或任何类型的文件,或者它不再存在。

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

在第一个未缓存的调用中,大多数情况下不需要系统调用。具体来说,Windows或Unix都不需要系统调用,除非在某些Unix文件系统(如网络文件系统)上返回 dirent.d_type == DT_UNKNOWN .

这种方法可以提高 OSError ,如 PermissionError ,但是 FileNotFoundError 被捕获而不被引发。

stat(*, follow_symlinks=True)

返回A stat_result 此项的对象。默认情况下,此方法遵循符号链接;若要统计符号链接,请添加 follow_symlinks=False 参数。

在UNIX上,此方法始终需要系统调用。在Windows上,如果 follow_symlinksTrue 条目是一个重分析点(例如,符号链接或目录连接)。

在Windows上 st_inost_devst_nlink 的属性 stat_result 总是设置为零。调用 os.stat() 获取这些属性。

结果缓存在 os.DirEntry 对象,具有单独的缓存 follow_symlinks TrueFalse . 调用 os.stat() 获取最新信息。

注意,在 os.DirEntrypathlib.Path . 尤其是, name 属性的含义与 is_dir()is_file()is_symlink()stat() 方法。

3.5 新版功能.

在 3.6 版更改: 增加了对 PathLike 接口。为添加了支持 bytes Windows上的路径。

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

获取文件或文件描述符的状态。执行相当于 stat() 给定路径上的系统调用。 path 可以指定为字符串或字节--直接或间接通过 PathLike 接口——或者作为打开的文件描述符。返回A stat_result 对象。

此函数通常遵循symlinks;若要统计symlink,请添加参数 follow_symlinks=False 或使用 lstat() .

此功能可以支持 specifying a file descriptornot following symlinks .

在窗户上,经过 follow_symlinks=False 将禁用以下所有名称代理项重分析点,包括符号链接和目录连接。将直接打开与链接不相似或操作系统无法遵循的其他类型的重分析点。当跟踪多个链接的链时,这可能会导致返回原始链接,而不是阻止完全遍历的非链接。在这种情况下,若要获取最终路径的stat结果,请使用 os.path.realpath() 函数尽可能解析路径名并调用 lstat() 关于结果。这不适用于悬挂符号链接或连接点,这将引发通常的例外情况。

例子::

>>> 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_fdfollow_symlinks 参数,指定文件描述符而不是路径。

在 3.6 版更改: 接受一 path-like object .

在 3.8 版更改: 在Windows上,现在遵循操作系统可以解析的所有重分析点,并传递 follow_symlinks=False 禁用以下所有名称代理项重分析点。如果操作系统到达无法跟踪的重分析点, stat 现在返回原始路径的信息,就像 follow_symlinks=False 已指定而不是引发错误。

class os.stat_result

其属性大致对应于 stat 结构。它用于 os.stat()os.fstat()os.lstat() .

属性:

st_mode

文件模式:文件类型和文件模式位(权限)。

st_ino

依赖于平台,但如果非零,则唯一标识给定值的文件 st_dev .通常:

  • Unix上的inode编号,

  • 这个 file index 在Windows上

st_dev

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

硬链接数。

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上创建的时间,以纳秒为整数表示。

注解

的确切含义和解决方法 st_atimest_mtimest_ctime 属性取决于操作系统和文件系统。例如,在使用FAT或FAT32文件系统的Windows系统上, st_mtime 具有2秒分辨率,并且 st_atime 只有1天的分辨率。有关详细信息,请参阅操作系统文档。

同样,尽管 st_atime_nsst_mtime_nsst_ctime_ns 通常用纳秒表示,许多系统不提供纳秒精度。在提供纳秒精度的系统上,用于存储的浮点对象 st_atimest_mtimest_ctime 不能全部保留,这样会有点不准确。如果你需要准确的时间戳,你应该始终使用 st_atime_nsst_mtime_nsst_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

文件创建时间。

在Solaris和衍生产品上,还可以使用以下属性:

st_fstype

唯一标识包含文件的文件系统类型的字符串。

在Mac OS系统上,还可以使用以下属性:

st_rsize

文件的实际大小。

st_creator

文件的创建者。

st_type

文件类型。

在Windows系统上,以下属性也可用:

st_file_attributes

Windows文件属性: dwFileAttributes 会员 BY_HANDLE_FILE_INFORMATION 结构返回者 GetFileInformationByHandle() . 见 FILE_ATTRIBUTE_* 中的常量 stat 模块。

st_reparse_tag

什么时候? st_file_attributesFILE_ATTRIBUTE_REPARSE_POINT set,此字段包含标识重分析点类型的标记。见 IO_REPARSE_TAG_* 中的常量 stat 模块。

标准模块 stat 定义用于从中提取信息的函数和常量 stat 结构。(在Windows上,某些项用虚拟值填充。)

为了向后兼容,a stat_result 实例也可以作为至少10个整数的元组进行访问,从而提供 stat 结构,按顺序 st_modest_inost_devst_nlinkst_uidst_gidst_sizest_atimest_mtimest_ctime . 一些实现可能会在末尾添加更多的项。为了与旧的python版本兼容,访问 stat_result 作为一个元组,总是返回整数。

3.3 新版功能: 增加了 st_atime_nsst_mtime_nsst_ctime_ns 成员。

3.5 新版功能: 增加了 st_file_attributes Windows上的成员。

在 3.5 版更改: Windows现在返回文件索引为 st_ino 何时可用。

3.7 新版功能: 增加了 st_fstype solaris/derivatives的成员。

3.8 新版功能: 增加了 st_reparse_tag Windows上的成员。

在 3.8 版更改: 在Windows上 st_mode 成员现在将特殊文件标识为 S_IFCHRS_IFIFOS_IFBLK 适当时。

os.statvfs(path)

表演一个 statvfs() 给定路径上的系统调用。返回值是一个对象,其属性描述给定路径上的文件系统,并对应于 statvfs 结构,即: f_bsizef_frsizef_blocksf_bfreef_bavailf_filesf_ffreef_favailf_flagf_namemaxf_fsid .

为定义了两个模块级常量 f_flag 属性的位标志:如果 ST_RDONLY 设置为,则文件系统以只读方式安装,如果 ST_NOSUID 如果设置,则禁用或不支持setuid/setgid位的语义。

为基于GNU/GLIBC的系统定义了额外的模块级常量。这些是 ST_NODEV (不允许访问设备特殊文件) ST_NOEXEC (不允许程序执行) ST_SYNCHRONOUS (写操作立即同步) ST_MANDLOCK (允许强制锁定FS) ST_WRITE (在文件/目录/symlink上写入) ST_APPEND (仅附加文件) ST_IMMUTABLE (不可变文件) ST_NOATIME (不更新访问时间) ST_NODIRATIME (不更新目录访问时间) ST_RELATIME (相对于mtime/ctime更新atime)。

此功能可以支持 specifying a file descriptor .

Availability UNIX。

在 3.2 版更改: 这个 ST_RDONLYST_NOSUID 添加了常量。

3.3 新版功能: 添加了对指定的支持 path 作为打开的文件描述符。

在 3.4 版更改: 这个 ST_NODEVST_NOEXECST_SYNCHRONOUSST_MANDLOCKST_WRITEST_APPENDST_IMMUTABLEST_NOATIMEST_NODIRATIMEST_RELATIME 添加了常量。

在 3.6 版更改: 接受一 path-like object .

3.7 新版功能: 补充 f_fsid .

os.supports_dir_fd

A set 对象,指示 os 模块接受其打开的文件描述符 dir_fd 参数。不同的平台提供不同的特性,而底层的功能python用于实现 dir_fd 参数在所有Python支持的平台上都不可用。为了一致性,可以支持 dir_fd 始终允许指定参数,但如果在本地不可用时使用该功能,则会引发异常。(说明 None 对于 dir_fd 始终支持所有平台。)

检查特定函数是否接受其 dir_fd 参数,使用 in 运算符开启 supports_dir_fd . 例如,此表达式的计算结果为 True 如果 os.stat() 接受打开的文件描述符 dir_fd 在本地平台上:

os.stat in os.supports_dir_fd

目前 dir_fd 参数只能在Unix平台上工作;它们都不能在Windows上工作。

3.3 新版功能.

os.supports_effective_ids

A set 指示是否 os.access() 许可证说明 True 为其 effective_ids 本地平台上的参数。(说明 False 对于 effective_ids 总是在所有平台上受支持。)如果本地平台支持,则集合将包含 os.access() 否则它将是空的。

此表达式的计算结果为 True 如果 os.access() 支架 effective_ids=True 在本地平台上:

os.access in os.supports_effective_ids

目前 effective_ids 仅在UNIX平台上受支持;它不在Windows上工作。

3.3 新版功能.

os.supports_fd

A set 对象,指示 os 模块许可证 path 参数作为本地平台上打开的文件描述符。不同的平台提供了不同的特性,而python用来接受打开文件描述符的底层功能是 path 参数在所有Python支持的平台上都不可用。

确定特定函数是否允许为其指定打开的文件描述符 path 参数,使用 in 运算符开启 supports_fd . 例如,此表达式的计算结果为 True 如果 os.chdir() 接受打开的文件描述符 path 在您的本地平台上:

os.chdir in os.supports_fd

3.3 新版功能.

A set 对象,指示 os 模块接受 False 为了他们 follow_symlinks 本地平台上的参数。不同的平台提供不同的特性,而python用于实现的底层功能 follow_symlinks 并非所有平台都支持python。为了一致性,可以支持 follow_symlinks 始终允许指定参数,但如果在本地不可用时使用该功能,则会引发异常。(说明 True 对于 follow_symlinks 始终支持所有平台。)

检查特定函数是否接受 False 为其 follow_symlinks 参数,使用 in 运算符开启 supports_follow_symlinks . 例如,此表达式的计算结果为 True 如果您可以指定 follow_symlinks=False 打电话时 os.stat() 在本地平台上:

os.stat in os.supports_follow_symlinks

3.3 新版功能.

创建指向的符号链接 src 已命名 dst .

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

此功能可以支持 paths relative to directory descriptors .

注解

SeCreateSymbolicLinkPrivilege

OSError 在非特权用户调用函数时引发。

提出一个 auditing event os.symlink 带着论据 srcdstdir_fd .

Availability :Unix、Windows。

在 3.2 版更改: 添加了对Windows6.0(Vista)符号链接的支持。

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

在 3.6 版更改: 接受一 path-like object 对于 srcdst .

在 3.8 版更改: 添加了对具有开发人员模式的Windows上的无关联符号链接的支持。

os.sync()

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

Availability UNIX。

3.3 新版功能.

os.truncate(path, length)

截断对应于 path 所以最多 长度 字节大小。

此功能可以支持 specifying a file descriptor .

提出一个 auditing event os.truncate 带着论据 pathlength .

Availability :Unix、Windows。

3.3 新版功能.

在 3.5 版更改: 添加了对Windows的支持

在 3.6 版更改: 接受一 path-like object .

删除(删除)文件 path . 此函数在语义上与 remove()unlink 名称是它的传统Unix名称。请参阅以下文件: remove() 更多信息。

提出一个 auditing event os.remove 带着论据 pathdir_fd .

3.3 新版功能: 这个 dir_fd 参数。

在 3.6 版更改: 接受一 path-like object .

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

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

utime() 取两个可选参数, ns . 它们指定设置的时间 path 其用法如下:

  • 如果 ns 是指定的,它必须是窗体的2元组 (atime_ns, mtime_ns) 其中每个成员都是表示纳秒的int。

  • 如果 不是 None ,它必须是窗体的2元组 (atime, mtime) 其中每个成员都是表示秒的int或float。

  • 如果 Nonens 未指定,这相当于指定 ns=(atime_ns, mtime_ns) 其中两个时间都是当前时间。

为两者指定元组是错误的 ns .

请注意,您在此处设置的确切时间可能不会由后续的 stat() 调用,具体取决于操作系统记录访问和修改时间的分辨率;请参见 stat() . 保存准确时间的最佳方法是使用 st_atime_nsst_mtime_ns 来自 os.stat() 结果对象 ns 参数到 utime .

此功能可以支持 specifying a file descriptorpaths relative to directory descriptorsnot following symlinks .

提出一个 auditing event os.utime 带着论据 pathtimesnsdir_fd .

3.3 新版功能: 添加了对指定的支持 path 作为打开的文件描述符, dir_fdfollow_symlinksns 参数。

在 3.6 版更改: 接受一 path-like object .

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

通过自上而下或自下而上浏览目录树来生成目录树中的文件名。对于树中根目录为的每个目录 top (包括 top 它本身),产生一个3元组 (dirpath, dirnames, filenames) .

直接路径 是一个字符串,目录的路径。 地名 是中子目录的名称列表 直接路径 (不包括) '.''..'文件名 是中非目录文件的名称列表 直接路径 . 请注意,列表中的名称不包含路径组件。获取完整路径(以 top )到中的文件或目录 直接路径os.path.join(dirpath, name) . 列表是否排序取决于文件系统。如果文件从中删除或添加到 直接路径 目录生成列表时,是否包含该文件的名称未指定。

if可选参数 自顶向下True 或者未指定,目录的三元组在其任何子目录的三元组之前生成(目录自上而下生成)。如果 自顶向下False ,目录的三元组是在其所有子目录的三元组之后生成的(目录是自下而上生成的)。无论价值 自顶向下 ,在生成目录及其子目录的元组之前检索子目录列表。

什么时候? 自顶向下True ,调用方可以修改 地名 就地列出(可能使用 del 或切片分配),以及 walk() 将只递归到其名称保留在中的子目录中 地名 ;这可用于精简搜索、强制执行特定的访问顺序,甚至用于通知 walk() 关于调用方在恢复前创建或重命名的目录 walk() 再一次。修改 地名 什么时候? 自顶向下False 对漫游行为没有影响,因为在自下而上模式下,目录位于 地名 之前生成的 直接路径 它本身就产生了。

默认情况下,来自 scandir() 调用被忽略。if可选参数 出错 是指定的,它应该是一个函数;它将用一个参数调用,即 OSError 实例。它可以报告错误以继续执行漫游,或者引发异常以中止漫游。请注意,文件名可用作 filename 异常对象的属性。

默认情况下, walk() 不会进入解析为目录的符号链接。集合 跟踪链接True 在支持符号链接的系统上访问符号链接指向的目录。

注解

注意设置 跟踪链接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

在下一个示例中(简单实现 shutil.rmtree() )从树底向上行走是必要的, 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 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))

提出一个 auditing event os.walk 带着论据 toptopdownonerrorfollowlinks .

在 3.5 版更改: 此函数现在调用 os.scandir() 而不是 os.listdir() ,通过减少 os.stat() .

在 3.6 版更改: 接受一 path-like object .

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

它的行为和 walk() ,只不过它生成一个4元组 (dirpath, dirnames, filenames, dirfd) ,它支持 dir_fd .

直接路径地名filename 与相同 walk() 输出,以及 敌我识别 是指目录的文件描述符 直接路径 .

此函数始终支持 paths relative to directory descriptorsnot following symlinks . 但是,请注意,与其他函数不同, fwalk() 的默认值 follow_symlinksFalse .

注解

自从 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)

提出一个 auditing event os.fwalk 带着论据 toptopdownonerrorfollow_symlinksdir_fd .

Availability UNIX。

3.3 新版功能.

在 3.6 版更改: 接受一 path-like object .

在 3.7 版更改: 为添加了支持 bytes 路径。

os.memfd_create(name[, flags=os.MFD_CLOEXEC])

创建一个匿名文件并返回引用它的文件描述符。 旗帜 一定是 os.MFD_* 系统上可用的常量(或它们的按位或按位组合)。默认情况下,新的文件描述符是 non-inheritable .

中提供的名称 name 用作文件名,并将显示为目录中相应符号链接的目标。 /proc/self/fd/ . 显示的名称总是以前缀 memfd: 仅用于调试目的。名称不会影响文件描述符的行为,因此多个文件可以具有相同的名称,而不会产生任何副作用。

Availability :Linux 3.17或更高版本,带有glibc 2.27或更高版本。

3.8 新版功能.

os.MFD_CLOEXEC
os.MFD_ALLOW_SEALING
os.MFD_HUGETLB
os.MFD_HUGE_SHIFT
os.MFD_HUGE_MASK
os.MFD_HUGE_64KB
os.MFD_HUGE_512KB
os.MFD_HUGE_1MB
os.MFD_HUGE_2MB
os.MFD_HUGE_8MB
os.MFD_HUGE_16MB
os.MFD_HUGE_32MB
os.MFD_HUGE_256MB
os.MFD_HUGE_512MB
os.MFD_HUGE_1GB
os.MFD_HUGE_2GB
os.MFD_HUGE_16GB

这些标志可以传递给 memfd_create() .

Availability :Linux 3.17或更高版本,带有glibc 2.27或更高版本。这个 MFD_HUGE* 标志仅在Linux 4.14之后可用。

3.8 新版功能.

os.eventfd(initval[, flags=os.EFD_CLOEXEC])

创建并返回事件文件描述符。文件描述符支持RAW read()write() 在缓冲器大小为8的情况下, select()poll() 也很相似。请参见手册页 eventfd(2) 了解更多信息。缺省情况下,新文件描述符为 non-inheritable

初始化 是事件计数器的初始值。初始值必须是32位无符号整数。请注意,虽然事件计数器是最大值为2的无符号64位整数,但初始值仅限于32位无符号整数。64 -2.

旗帜 可以从以下位置构造 EFD_CLOEXECEFD_NONBLOCK ,以及 EFD_SEMAPHORE

如果 EFD_SEMAPHORE 并且事件计数器为非零, eventfd_read() 返回1并将计数器递减1。

如果 EFD_SEMAPHORE 未指定,并且事件计数器为非零, eventfd_read() 返回当前事件计数器值并将计数器重置为零。

如果事件计数器为零并且 EFD_NONBLOCK 未指定, eventfd_read() 块。

eventfd_write() 递增事件计数器。如果写入操作将计数器递增到大于2的值,则写入块。64 -2.

例子::

import os

# semaphore with start value '1'
fd = os.eventfd(1, os.EFD_SEMAPHORE | os.EFC_CLOEXEC)
try:
    # acquire semaphore
    v = os.eventfd_read(fd)
    try:
        do_work()
    finally:
        # release semaphore
        os.eventfd_write(fd, v)
finally:
    os.close(fd)

Availability :Linux 2.6.27或更高版本,带有glibc 2.8或更高版本。

3.10 新版功能.

os.eventfd_read(fd)

从以下位置读取值 eventfd() 文件描述符,并返回一个64位无符号整数。该函数不会验证 fd 是一种 eventfd()

Availability: See eventfd()

3.10 新版功能.

os.eventfd_write(fd, value)

将价值添加到 eventfd() 文件描述符。 价值 必须是64位无符号整数。该函数不会验证 fd 是一种 eventfd()

Availability: See eventfd()

3.10 新版功能.

os.EFD_CLOEXEC

设置新的执行时关闭标志 eventfd() 文件描述符。

Availability: See eventfd()

3.10 新版功能.

os.EFD_NONBLOCK

设置 O_NONBLOCK 新建的状态标志 eventfd() 文件描述符。

Availability: See eventfd()

3.10 新版功能.

os.EFD_SEMAPHORE

为从 eventfd() 文件描述符。读取时,内部计数器递减1。

Availability :Linux 2.6.30或更高版本,带有glibc 2.8或更高版本。

3.10 新版功能.

Linux扩展属性

3.3 新版功能.

这些功能仅在Linux上可用。

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

返回扩展文件系统属性的值 属性 对于 path . 属性 可以是字节或str(直接或间接通过 PathLike 接口。如果它是str,则使用文件系统编码进行编码。

此功能可以支持 specifying a file descriptornot following symlinks .

提出一个 auditing event os.getxattr 带着论据 pathattribute .

在 3.6 版更改: 接受一 path-like object 对于 path属性 .

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

返回上扩展文件系统属性的列表 path . 列表中的属性表示为使用文件系统编码解码的字符串。如果 pathNonelistxattr() 将检查当前目录。

此功能可以支持 specifying a file descriptornot following symlinks .

提出一个 auditing event os.listxattr 带着论证 path .

在 3.6 版更改: 接受一 path-like object .

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

删除扩展文件系统属性 属性 从… path属性 应为字节或字符串(直接或间接通过 PathLike 接口)。如果它是字符串,则使用 filesystem encoding and error handler

此功能可以支持 specifying a file descriptornot following symlinks .

提出一个 auditing event os.removexattr 带着论据 pathattribute .

在 3.6 版更改: 接受一 path-like object 对于 path属性 .

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

设置扩展文件系统属性 属性 在……上面 path价值属性 必须是没有嵌入NULL的字节或字符串(直接或间接通过 PathLike 接口)。如果它是字符串,则使用 filesystem encoding and error handler旗帜 可能是 XATTR_REPLACEXATTR_CREATE 。如果 XATTR_REPLACE 并且该属性不存在, EEXISTS 都会被举起。如果 XATTR_CREATE 并且该属性已经存在,则不会创建该属性,并且 ENODATA 都会被举起。

此功能可以支持 specifying a file descriptornot following symlinks .

注解

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

提出一个 auditing event os.setxattr 带着论据 pathattributevalueflags .

在 3.6 版更改: 接受一 path-like object 对于 path属性 .

os.XATTR_SIZE_MAX

扩展属性值的最大大小。目前,这是Linux上的64 kib。

os.XATTR_CREATE

这是中Flags参数的可能值 setxattr() . 它指示操作必须创建属性。

os.XATTR_REPLACE

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

过程管理

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

各种各样 exec* 函数获取加载到进程中的新程序的参数列表。在每种情况下,这些参数中的第一个作为自己的名称传递给新程序,而不是作为用户可能在命令行上键入的参数。对于C程序员来说,这是 argv[0] 传递到程序的 main() . 例如, os.execv('/bin/echo', ['foo', 'bar']) 将只打印 bar 在标准输出上; foo 似乎被忽视了。

os.abort()

生成一个 SIGABRT 向当前进程发送信号。在Unix上,默认行为是生成核心转储;在Windows上,进程立即返回退出代码 3 . 请注意,调用此函数不会调用为注册的python信号处理程序 SIGABRT 具有 signal.signal() .

os.add_dll_directory(path)

向dll搜索路径添加路径。

此搜索路径用于解析导入的扩展模块的依赖项(模块本身通过sys.path解析),以及 ctypes .

通过调用删除目录 关闭() 在返回的对象上或在 with 语句。

Microsoft documentation 有关如何加载DLL的详细信息。

提出一个 auditing event os.add_dll_directory 带着论证 path .

Availability :Windows。

3.8 新版功能: 以前版本的cpython将使用当前进程的默认行为解析dll。这导致了不一致性,例如有时只能搜索 PATH 或当前工作目录,以及操作系统功能,例如 AddDllDirectory 没有效果。

在3.8中,加载DLL的两种主要方式现在显式地覆盖整个进程的行为以确保一致性。见 porting notes 有关更新库的信息。

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上,新的可执行文件被加载到当前进程中,并且将具有与调用方相同的进程ID。错误将报告为 OSError 例外情况。

立即更换当前流程。未刷新打开的文件对象和描述符,因此如果这些打开的文件上可能存在缓冲数据,则应使用 sys.stdout.flush()os.fsync() 在调用 exec* 功能。

“L”和“V”的变体 exec* 函数在传递命令行参数的方式上有所不同。如果在编写代码时参数的数量是固定的,“l”变量可能是最容易使用的;单个参数只是成为 execl*() 功能。当参数的数目是可变的时,“v”变量是很好的,参数在列表或元组中作为 args 参数。在这两种情况下,子进程的参数都应该以正在运行的命令的名称开始,但这不是强制执行的。

包括靠近末端的“P”的变体 (execlp()execlpe()execvp()execvpe() )将使用 PATH 用于定位程序的环境变量 file . 当环境被替换时(使用 exec*e 变量,在下一段中讨论),新环境用作 PATH 变量。其他变体, execl()execle()execv()execve() ,将不使用 PATH 用于定位可执行文件的变量; path 必须包含适当的绝对或相对路径。

为了 execle()execlpe()execve()execvpe() (注意这些都以“e”结尾),即 env 参数必须是用于为新进程定义环境变量的映射(使用这些变量而不是当前进程的环境);函数 execl()execlp()execv()execvp() 所有这些都会导致新进程继承当前进程的环境。

为了 execve() 在某些平台上, path 也可以指定为打开的文件描述符。您的平台可能不支持此功能;您可以使用 os.supports_fd .如果它不可用,使用它将引发 NotImplementedError .

提出一个 auditing event os.exec 带着论据 pathargsenv .

Availability :Unix、Windows。

3.3 新版功能: 添加了对指定的支持 path 作为的打开文件描述符 execve() .

在 3.6 版更改: 接受一 path-like object .

os._exit(n)

退出状态为的进程 n ,而不调用清理处理程序、刷新stdio缓冲区等。

注解

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

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

注解

其中一些可能在所有的Unix平台上都不可用,因为存在一些变化。这些常量是在底层平台定义的地方定义的。

os.EX_OK

表示没有发生错误的退出代码。

Availability UNIX。

os.EX_USAGE

退出代码,这意味着命令的使用不正确,例如给出的参数数目错误。

Availability UNIX。

os.EX_DATAERR

表示输入数据不正确的退出代码。

Availability UNIX。

os.EX_NOINPUT

表示输入文件不存在或不可读的退出代码。

Availability UNIX。

os.EX_NOUSER

表示指定用户不存在的退出代码。

Availability UNIX。

os.EX_NOHOST

表示指定主机不存在的退出代码。

Availability UNIX。

os.EX_UNAVAILABLE

表示所需服务不可用的退出代码。

Availability UNIX。

os.EX_SOFTWARE

表示检测到内部软件错误的退出代码。

Availability UNIX。

os.EX_OSERR

退出代码,表示检测到操作系统错误,例如无法复刻或创建管道。

Availability UNIX。

os.EX_OSFILE

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

Availability UNIX。

os.EX_CANTCREAT

退出代码,表示无法创建用户指定的输出文件。

Availability UNIX。

os.EX_IOERR

退出代码,这意味着对某个文件执行I/O时出错。

Availability UNIX。

os.EX_TEMPFAIL

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

Availability UNIX。

os.EX_PROTOCOL

退出代码,表示协议交换非法、无效或不被理解。

Availability UNIX。

os.EX_NOPERM

退出代码,表示权限不足,无法执行操作(但不适用于文件系统问题)。

Availability UNIX。

os.EX_CONFIG

表示发生某种配置错误的退出代码。

Availability UNIX。

os.EX_NOTFOUND

表示“找不到条目”的退出代码。

Availability UNIX。

os.fork()

复刻子进程。返回 0 在子进程中,子进程ID在父进程中。如果发生错误 OSError 提高了。

注意,一些平台,包括FreeBSD<=6.3和Cygwin,在使用 fork() 从一根线。

提出一个 auditing event os.fork 没有参数。

在 3.8 版更改: 调用 fork() 在子解释器中不再支持 (RuntimeError 提高了)。

警告

ssl 对于使用带有fork()的ssl模块的应用程序。

Availability UNIX。

os.forkpty()

复刻子进程,使用新的伪终端作为子进程的控制终端。返回一对 (pid, fd) 在哪里 pid0 在子级中,新子级的进程ID在父级中,以及 fd 是伪终端主端的文件描述符。对于更便携的方法,请使用 pty 模块。如果发生错误 OSError 提高了。

提出一个 auditing event os.forkpty 没有参数。

在 3.8 版更改: 调用 forkpty() 在子解释器中不再支持 (RuntimeError 提高了)。

Availability :一些风格的Unix。

os.kill(pid, sig)

发送信号 sig 对过程 pid . 主机平台上可用的特定信号的常量在 signal 模块。

Windows: signal.CTRL_C_EVENTsignal.CTRL_BREAK_EVENT 信号是特殊的信号,只能发送到共享一个控制台窗口的控制台进程,例如一些子进程。任何其他价值 sig 将导致TerminateProcess API无条件终止进程,并且退出代码将设置为 sig . 的Windows版本 kill() 另外,需要杀死进程句柄。

也见 signal.pthread_kill() .

提出一个 auditing event os.kill 带着论据 pidsig .

3.2 新版功能: Windows支持。

os.killpg(pgid, sig)

发送信号 sig 到流程组 pgid .

提出一个 auditing event os.killpg 带着论据 pgidsig .

Availability UNIX。

os.nice(increment)

添加 增量 过程的“美好”。回归新的美好。

Availability UNIX。

os.pidfd_open(pid, flags=0)

返回引用进程的文件描述符 pid . 此描述符可用于执行流程管理,而无需争用和信号。这个 旗帜 参数是为将来的扩展提供的;当前未定义标志值。

pidfd_open(2) 详细信息请参见手册页。

Availability :Linux 5.3版+

3.9 新版功能.

os.plock(op)

将程序段锁定到内存中。价值 op (定义在 <sys/lock.h> )确定锁定的段。

Availability UNIX。

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

打开命令的管道 cmd . 返回值是一个连接到管道的打开的文件对象,根据 mode'r' (默认)或 'w' . 这个 缓冲 参数的含义与内置的对应参数相同 open() 功能。返回的文件对象读取或写入文本字符串,而不是字节。

这个 close 方法返回 None 如果子进程成功退出,或者如果出现错误,则返回子进程的返回代码。在POSIX系统中,如果返回代码为正数,则表示进程的返回值左移一个字节。如果返回代码为负数,则进程将由返回代码的负值给出的信号终止。(例如,返回值可能是 - signal.SIGKILL 如果子进程被终止。)在Windows系统上,返回值包含子进程的带符号整数返回代码。

在UNIX上, waitstatus_to_exitcode() 可用于转换 close 方法结果(退出状态)如果不是 None . 在Windows上 close 方法结果直接是退出代码(或 None

这是使用 subprocess.Popen ;请参阅该类的文档,以获取更强大的方法来管理子流程和与之通信。

os.posix_spawn(path, argv, env, *, file_actions=None, setpgroup=None, resetids=False, setsid=False, setsigmask=(), setsigdef=(), scheduler=None)

包裹 posix_spawn() 从python使用的C库API。

大多数用户应该使用 subprocess.run() 而不是 posix_spawn() .

仅位置参数 pathargsenv 类似于 execve() .

这个 path 参数是可执行文件的路径。这个 path 应该包含一个目录。使用 posix_spawnp() 若要传递没有目录的可执行文件,请执行以下操作。

这个 file_actions 参数可以是一系列元组,描述在C库实现的 fork()exec() 步骤。每个元组中的第一项必须是下面列出的三个类型指示符之一,用于描述其余的元组元素:

os.POSIX_SPAWN_OPEN

(os.POSIX_SPAWN_OPEN, fd, path, flags, mode)

表演 os.dup2(os.open(path, flags, mode), fd) .

os.POSIX_SPAWN_CLOSE

(os.POSIX_SPAWN_CLOSE, fd)

表演 os.close(fd) .

os.POSIX_SPAWN_DUP2

(os.POSIX_SPAWN_DUP2, fd, new_fd)

表演 os.dup2(fd, new_fd) .

这些元组对应于C库 posix_spawn_file_actions_addopen()posix_spawn_file_actions_addclose()posix_spawn_file_actions_adddup2() 用于准备的API调用 posix_spawn() 调用它自己。

这个 SETPGROUP 参数将把子进程组设置为指定的值。如果指定的值为0,则子进程组ID将与其进程ID相同。如果 SETPGROUP 未设置,子进程将继承父进程组ID。此参数对应于C库 POSIX_SPAWN_SETPGROUP flag。

如果 再结晶 论证是 True 它会将子进程的有效uid和gid重置为父进程的实际uid和gid。如果参数是 False 然后,子项保留父母的有效uid和gid。在这两种情况下,如果在可执行文件上启用了set user id和set group id权限位,它们的效果将覆盖有效uid和gid的设置。此参数对应于C库 POSIX_SPAWN_RESETIDS flag。

如果 塞西德 论证是 True ,它将为创建新的会话ID posix_spawn . 塞西德 要求 POSIX_SPAWN_SETSIDPOSIX_SPAWN_SETSID_NP flag。否则, NotImplementedError 提高了。

这个 设置SIGSIM掩码 参数将把信号屏蔽设置为指定的信号集。如果不使用该参数,则子级继承父级的信号掩码。此参数对应于C库 POSIX_SPAWN_SETSIGMASK flag。

这个 西格迪夫 参数将重置指定集中所有信号的处理。此参数对应于C库 POSIX_SPAWN_SETSIGDEF flag。

这个 调度程序 参数必须是包含(可选)计划程序策略和的实例的元组 sched_param 使用调度程序参数。一个值 None 在计划程序策略的位置表示没有提供。此参数是C库的组合 POSIX_SPAWN_SETSCHEDPARAMPOSIX_SPAWN_SETSCHEDULER flag。

提出一个 auditing event os.posix_spawn 带着论据 pathargvenv .

3.8 新版功能.

Availability UNIX。

os.posix_spawnp(path, argv, env, *, file_actions=None, setpgroup=None, resetids=False, setsid=False, setsigmask=(), setsigdef=(), scheduler=None)

包裹 posix_spawnp() 从python使用的C库API。

类似 posix_spawn() 除了系统搜索 可执行文件 文件在目录列表中 PATH 环境变量(与 execvp(3)

提出一个 auditing event os.posix_spawn 带着论据 pathargvenv .

3.8 新版功能.

Availabilityposix_spawn() 文档。

os.register_at_fork(*, before=None, after_in_parent=None, after_in_child=None)

注册新子进程复刻时要执行的可调用文件,使用 os.fork() 或者类似的过程复制API。参数是可选的,仅限关键字。每个指定一个不同的调用点。

  • before 在复刻子进程之前调用的函数。

  • after_in_parent 是在子进程复刻后从父进程调用的函数。

  • after_in_child 是从子进程调用的函数。

只有当控件预期返回到Python解释器时,才会进行这些调用。典型 subprocess 启动不会触发它们,因为子项不会重新进入解释器。

以相反的注册顺序调用在复刻前注册执行的函数。在复刻后注册执行的函数(父函数或子函数)按注册顺序调用。

注意 fork() 由第三方C代码进行的调用不能调用这些函数,除非它显式调用 PyOS_BeforeFork()PyOS_AfterFork_Parent()PyOS_AfterFork_Child() .

无法注销函数。

Availability UNIX。

3.7 新版功能.

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)

执行程序 path 在一个新的过程中。

(注意 subprocess 模块为生成新进程和检索其结果提供了更强大的工具;使用该模块比使用这些函数更好。特别是检查 用替换旧函数 subprocess 模块 部分)

如果 modeP_NOWAIT ,此函数返回新进程的进程ID;如果 modeP_WAIT ,如果进程正常退出,则返回该进程的退出代码,或者 -signal 在哪里 信号 是终止进程的信号。在Windows上,进程ID实际上是进程句柄,因此可以与 waitpid() 功能。

注意在VxWorks上,此函数不返回 -signal 当新进程终止时。相反,它会引发OSError异常。

“L”和“V”的变体 spawn* 函数在传递命令行参数的方式上有所不同。如果在编写代码时参数的数量是固定的,“l”变量可能是最容易使用的;单个参数只是成为 spawnl*() 功能。当参数的数目是可变的时,“v”变量是很好的,参数在列表或元组中作为 args 参数。在这两种情况下,子进程的参数必须以正在运行的命令的名称开始。

包括靠近末端的第二个“P”的变体 (spawnlp()spawnlpe()spawnvp()spawnvpe() )将使用 PATH 用于定位程序的环境变量 file . 当环境被替换时(使用 spawn*e 变量,在下一段中讨论),新环境用作 PATH 变量。其他变体, spawnl()spawnle()spawnv()spawnve() ,将不使用 PATH 用于定位可执行文件的变量; path 必须包含适当的绝对或相对路径。

为了 spawnle()spawnlpe()spawnve()spawnvpe() (注意这些都以“e”结尾),即 env 参数必须是一个映射,用于定义新流程的环境变量(使用这些变量而不是当前流程的环境);函数 spawnl()spawnlp()spawnv()spawnvp() 所有这些都会导致新进程继承当前进程的环境。注意键和值 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)

提出一个 auditing event os.spawn 带着论据 modepathargsenv .

Availability :Unix、Windows。 spawnlp()spawnlpe()spawnvp()spawnvpe() 在Windows上不可用。 spawnle()spawnve() Windows上的线程不安全;我们建议您使用 subprocess 模块代替。

在 3.6 版更改: 接受一 path-like object .

os.P_NOWAIT
os.P_NOWAITO

的可能值 mode 参数 spawn* 功能系列。如果给出这些值中的任何一个,则 spawn*() 函数将在创建新进程后立即返回,返回值为进程ID。

Availability :Unix、Windows。

os.P_WAIT

的可能值 mode 参数 spawn* 功能系列。如果这是作为 mode , the spawn*() 函数在新进程运行到完成之前不会返回,并且将返回运行成功的进程的退出代码,或者 -signal 如果信号终止了进程。

Availability :Unix、Windows。

os.P_DETACH
os.P_OVERLAY

的可能值 mode 参数 spawn* 功能系列。与上面列出的相比,它们的便携性较差。 P_DETACH 类似于 P_NOWAIT 但新进程与调用进程的控制台分离。如果 P_OVERLAY 如果使用,则将替换当前进程;将 spawn* 函数将不返回。

Availability :Windows。

os.startfile(path[, operation])

用关联的应用程序启动文件。

什么时候? 操作 未指定或 'open' ,这类似于在Windows资源管理器中双击文件,或将文件名作为参数提供给 start 来自交互命令shell的命令:该文件以其扩展名关联的任何应用程序(如果有)打开。

当另一个 操作 如果给定,它必须是一个“命令动词”,指定应该对文件执行什么操作。微软记录的常见动词有 'print''edit' (用于文件)以及 'explore''find' (用于目录)。

startfile() 启动关联的应用程序后立即返回。没有等待应用程序关闭的选项,也没有检索应用程序退出状态的方法。这个 path 参数是相对于当前目录的。如果要使用绝对路径,请确保第一个字符不是斜线 ('/' );基础Win32 ShellExecute() 如果是,函数就不工作。使用 os.path.normpath() 函数以确保为Win32正确编码路径。

为了减少解释器启动开销,win32 ShellExecute() 在首次调用此函数之前,不会解析函数。如果无法解析函数, NotImplementedError 将被引发。

提出一个 auditing event os.startfile 带着论据 pathoperation .

Availability :Windows。

os.system(command)

在子shell中执行命令(字符串)。这是通过调用标准的C函数来实现的 system() 也有同样的局限性。改变到 sys.stdin 等不反映在已执行命令的环境中。如果 命令 生成任何输出,它将被发送到解释器标准输出流。

在Unix上,返回值是以指定格式编码的进程的退出状态。 wait() . 注意,posix没有指定c的返回值的含义。 system() 函数,所以python函数的返回值依赖于系统。

在Windows上,返回值是运行后由系统外壳程序返回的值。 命令 . 外壳由Windows环境变量提供 COMSPEC :通常是 cmd.exe 返回命令运行的退出状态;在使用非本机shell的系统上,请参阅shell文档。

这个 subprocess 模块为生成新进程和检索其结果提供了更强大的工具;使用该模块比使用此函数更好。查看 用替换旧函数 subprocess 模块 节中 subprocess 一些有用配方的文档。

在UNIX上, waitstatus_to_exitcode() 可用于将结果(退出状态)转换为退出代码。在Windows上,结果直接是退出代码。

提出一个 auditing event os.system 带着论证 command .

Availability :Unix、Windows。

os.times()

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

  • user -用户时间

  • system -系统时间

  • children_user -所有子进程的用户时间

  • children_system -所有子进程的系统时间

  • elapsed -自过去某个固定点以来经过的实时时间

为了向后兼容,此对象的行为也类似于包含 usersystemchildren_userchildren_systemelapsed 按这个顺序。

请参见Unix手册页 times(2)times(3) Unix上的手动页面或 the GetProcessTimes MSDN 在窗户上。仅在Windows上 usersystem 已知;其他属性为零。

Availability :Unix、Windows。

在 3.3 版更改: 返回从元组更改为具有命名属性的类似于元组的对象的类型。

os.wait()

等待子进程完成,返回一个包含其PID和退出状态指示的元组:一个16位数字,其低字节是终止进程的信号号,其高字节是退出状态(如果信号号为零);如果生成了核心文件,则设置低字节的高位。

waitstatus_to_exitcode() 可用于将退出状态转换为退出代码。

Availability UNIX。

参见

waitpid() 可用于等待特定子进程完成,并具有更多选项。

os.waitid(idtype, id, options)

等待一个或多个子进程完成。 ID-型 可以是 P_PIDP_PGIDP_ALLP_PIDFD 在Linux上。 id 指定要等待的PID。 选项 由一个或多个 WEXITEDWSTOPPEDWCONTINUED 此外,还可以使用 WNOHANGWNOWAIT . 返回值是表示包含在 siginfo_t 结构,即: si_pidsi_uidsi_signosi_statussi_codeNone 如果 WNOHANG 已指定,并且没有处于可等待状态的子级。

Availability UNIX。

3.3 新版功能.

os.P_PID
os.P_PGID
os.P_ALL

这些是的可能值 ID-型 在里面 waitid() . 它们如何影响 id 被解释。

Availability UNIX。

3.3 新版功能.

os.P_PIDFD

这是Linux特有的 ID-型 这表明 id 是引用进程的文件描述符。

Availability :Linux 5.4版+

3.9 新版功能.

os.WEXITED
os.WSTOPPED
os.WNOWAIT

可用于 option 在里面 waitid() 指定要等待的子信号。

Availability UNIX。

3.3 新版功能.

os.CLD_EXITED
os.CLD_KILLED
os.CLD_DUMPED
os.CLD_TRAPPED
os.CLD_STOPPED
os.CLD_CONTINUED

这些是的可能值 si_code 在返回的结果中 waitid() .

Availability UNIX。

3.3 新版功能.

在 3.9 版更改: 补充 CLD_KILLEDCLD_STOPPED 价值观。

os.waitpid(pid, options)

此函数的详细信息在UNIX和Windows上有所不同。

在Unix上:等待进程ID给定的子进程完成 pid ,并返回一个包含其进程ID和退出状态指示(编码为 wait() )调用的语义受整数值的影响。 option ,应该是 0 用于正常操作。

如果 pid 大于 0waitpid() 请求该特定进程的状态信息。如果 pid0 ,请求是当前进程的进程组中任何子进程的状态。如果 pid-1 ,该请求属于当前进程的任何子进程。如果 pid 小于 -1 ,请求进程组中的任何进程的状态 -pid (绝对值 pid

OSError 当syscall返回-1时,用errno值引发。

在Windows上:等待进程句柄给定的进程完成 pid ,并返回包含 pid ,其退出状态左移8位(移位使跨平台使用该功能更容易)。一 pid 小于或等于 0 在Windows上没有特殊意义,并引发异常。整数的值 option 没有效果。 pid 可以引用ID已知的任何进程,不一定是子进程。这个 spawn* 用调用的函数 P_NOWAIT 退回合适的工艺手柄。

waitstatus_to_exitcode() 可用于将退出状态转换为退出代码。

在 3.5 版更改: 如果系统调用被中断且信号处理程序没有引发异常,则函数现在将重试系统调用,而不是引发 InterruptedError 例外(见) PEP 475 理由)。

os.wait3(options)

类似 waitpid() ,除非未提供进程ID参数,并且返回包含子进程ID、退出状态指示和资源使用信息的3元素元组。参照 resource getrusage() 有关资源使用信息的详细信息。选项参数与提供给 waitpid()wait4() .

waitstatus_to_exitcode() 可用于将退出状态转换为退出代码。

Availability UNIX。

os.wait4(pid, options)

类似 waitpid() ,除了包含子进程ID、退出状态指示和资源使用信息的3元素元组外,将返回。参照 resource getrusage() 有关资源使用信息的详细信息。关于 wait4() 与提供给 waitpid() .

waitstatus_to_exitcode() 可用于将退出状态转换为退出代码。

Availability UNIX。

os.waitstatus_to_exitcode(status)

将等待状态转换为退出代码。

在UNIX上:

  • 如果进程正常退出(如果 WIFEXITED(status) 为true),返回进程退出状态(return WEXITSTATUS(status) ):结果大于或等于0。

  • 如果进程被信号终止(如果 WIFSIGNALED(status) 是真的),返回 -signum 在哪里? 符号 是导致进程终止的信号数(返回 -WTERMSIG(status) ):结果小于0。

  • 否则,提高 ValueError .

在Windows上,返回 地位 右移8位。

在Unix上,如果正在跟踪进程或 waitpid() 被召唤 WUNTRACED 选项,调用者必须首先检查 WIFSTOPPED(status) 是真的。如果 WIFSTOPPED(status) 是真的。

3.9 新版功能.

os.WNOHANG

选择权 waitpid() 如果没有可用的子进程状态,则立即返回。函数返回 (0, 0) 在这种情况下。

Availability UNIX。

os.WCONTINUED

如果自上次报告子进程的状态后,子进程已从任务控制停止继续,则此选项将导致子进程被报告。

Availability :一些Unix系统。

os.WUNTRACED

如果子进程已停止,但自停止后尚未报告其当前状态,则此选项将导致报告子进程。

Availability UNIX。

以下函数采用由返回的进程状态代码 system()wait()waitpid() 作为参数。它们可用于确定过程的处置。

os.WCOREDUMP(status)

返回 True 如果为进程生成了核心转储,则返回 False .

只有当 WIFSIGNALED() 是真的。

Availability UNIX。

os.WIFCONTINUED(status)

返回 True 如果已停止的子进程已通过 SIGCONT (如果进程已从作业控制停止继续),否则返回 False .

WCONTINUED 选择权。

Availability UNIX。

os.WIFSTOPPED(status)

返回 True 如果进程是通过发送信号而停止的,则返回 False .

WIFSTOPPED() 只返回 True 如果 waitpid() 电话是用 WUNTRACED 选项或跟踪进程的时间(请参见 ptrace(2)

Availability UNIX。

os.WIFSIGNALED(status)

返回 True 如果进程被信号终止,则返回 False .

Availability UNIX。

os.WIFEXITED(status)

返回 True 如果进程正常退出,即通过调用 exit()_exit() ,或者从 main() ;否则返回 False .

Availability UNIX。

os.WEXITSTATUS(status)

返回进程退出状态。

只有当 WIFEXITED() 是真的。

Availability UNIX。

os.WSTOPSIG(status)

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

只有当 WIFSTOPPED() 是真的。

Availability UNIX。

os.WTERMSIG(status)

返回导致进程终止的信号的编号。

只有当 WIFSIGNALED() 是真的。

Availability UNIX。

与调度程序的接口

这些函数控制操作系统如何分配进程的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 . policy 是上面的调度策略常量之一。

os.sched_get_priority_max(policy)

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

os.sched_setscheduler(pid, policy, param)

为具有PID的进程设置调度策略 pid . 一 pid 0表示调用进程。 policy 是上面的调度策略常量之一。 帕拉姆 是一个 sched_param 实例。

os.sched_getscheduler(pid)

返回带有PID的进程的调度策略 pid . 一 pid 0表示调用进程。结果是上面的调度策略常量之一。

os.sched_setparam(pid, param)

为带有PID的进程设置调度参数 pid . 一 pid 0表示调用进程。 帕拉姆 是一个 sched_param 实例。

os.sched_getparam(pid)

将计划参数返回为 sched_param PID流程实例 pid . 一 pid 0表示调用进程。

os.sched_rr_get_interval(pid)

以秒为单位返回带有PID的进程的循环量 pid . 一 pid 0表示调用进程。

os.sched_yield()

自愿放弃CPU。

os.sched_setaffinity(pid, mask)

用PID限制过程 pid (或当前进程,如果为零)到一组CPU。 mask 是表示进程应限制到的CPU集的整数的iterable。

os.sched_getaffinity(pid)

用PID返回进程的CPU集 pid (或当前进程,如果为零)被限制为。

其他系统信息

os.confstr(name)

返回字符串值的系统配置值。 name 指定要检索的配置值;它可以是一个字符串,该字符串是定义的系统值的名称;这些名称在许多标准(POSIX、UNIX 95、UNIX 98和其他标准)中指定。有些平台还定义了其他名称。主机操作系统已知的名称作为 confstr_names 字典。对于未包含在该映射中的配置变量,传递一个整数 name 也可接受。

如果配置值由指定 name 未定义, None 返回。

如果 name 是一个字符串,未知, ValueError 提高了。如果特定值 name 主机系统不支持,即使它包含在 confstr_names ,一个 OSError 提出与 errno.EINVAL 错误号。

Availability UNIX。

os.confstr_names

字典映射名称被接受 confstr() 到主机操作系统为这些名称定义的整数值。这可用于确定系统已知的名称集。

Availability UNIX。

os.cpu_count()

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

这个数字不等于当前进程可以使用的CPU数量。可用CPU的数量可以通过 len(os.sched_getaffinity(0))

3.4 新版功能.

os.getloadavg()

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

Availability UNIX。

os.sysconf(name)

返回整数值系统配置值。如果配置值由指定 name 未定义, -1 返回。关于 name 参数用于 confstr() 这里也适用;提供已知名称信息的字典由 sysconf_names .

Availability UNIX。

os.sysconf_names

字典映射名称被接受 sysconf() 到主机操作系统为这些名称定义的整数值。这可用于确定系统已知的名称集。

Availability UNIX。

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

对路径名的更高级别操作在 os.path 模块。

os.curdir

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

os.pardir

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

os.sep

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

os.altsep

操作系统用来分隔路径名组件的可选字符,或 None 如果只存在一个分隔符。这是设置为 '/' 在Windows系统上 sep 是反斜杠。也可通过 os.path .

os.extsep

将基文件名与扩展名分开的字符;例如 '.' 在里面 os.py . 也可通过 os.path .

os.pathsep

操作系统通常用来分隔搜索路径组件的字符(如 PATH ),如 ':' 对于POSIX或 ';' 对于Windows。也可通过 os.path .

os.defpath

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

os.linesep

用于分隔(或者更确切地说,终止)当前平台上的行的字符串。这可以是单个字符,例如 '\n' 例如,对于POSIX或多个字符, '\r\n' 对于Windows。不要使用 os.linesep 在以文本模式(默认)写入打开的文件时用作行终止符;使用单个 '\n' 相反,在所有平台上。

os.devnull

空设备的文件路径。例如: '/dev/null' 对于POSIX, 'nul' 对于Windows。也可通过 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) 不同的flag意味着什么。

3.3 新版功能.

随机数

os.getrandom(size, flags=0)

达到 size 随机字节。函数返回的字节数可能少于请求的字节数。

这些字节可用于种子用户空间随机数生成器或用于加密目的。

getrandom() 依赖于从设备驱动程序和其他环境噪声源收集的熵。不必要地读取大量数据将对 /dev/random/dev/urandom 设备。

flags参数是一个位掩码,可以包含零个或多个以下值或同时包含这些值: os.GRND_RANDOMGRND_NONBLOCK .

也见 Linux getrandom() manual page .

Availability :Linux 3.17及更高版本。

3.6 新版功能.

os.urandom(size)

返回一个字符串 size 适合加密使用的随机字节。

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

在Linux上,如果 getrandom() 系统调用可用,它在阻塞模式下使用:阻塞,直到系统urandom熵池初始化(内核收集128位熵)。见 PEP 524 理由是。在Linux上 getrandom() 函数可用于在非阻塞模式下获取随机字节(使用 GRND_NONBLOCK 或者轮询,直到初始化系统urandom熵池。

在类Unix系统上,随机字节从 /dev/urandom 装置。如果 /dev/urandom 设备不可用或不可读, NotImplementedError 引发异常。

在Windows上,它将使用 CryptGenRandom() .

参见

这个 secrets 模块提供更高级别的功能。有关您平台提供的随机数生成器的易于使用的接口,请参见 random.SystemRandom .

在 3.6.0 版更改: 在Linux上, getrandom() 现在用于阻塞模式以提高安全性。

在 3.5.2 版更改: 在Linux上,如果 getrandom() 系统调用块(urandom熵池尚未初始化),返回到读取 /dev/urandom .

在 3.5 版更改: 在Linux 3.17及更高版本上, getrandom() 系统调用现在在可用时使用。在OpenBSD 5.6及更高版本上,C getentropy() 现在使用函数。这些函数避免使用内部文件描述符。

os.GRND_NONBLOCK

默认情况下,当从 /dev/randomgetrandom() 如果没有可用的随机字节,以及从 /dev/urandom 如果熵池尚未初始化,则会阻塞。

如果 GRND_NONBLOCK 设置标志,然后 getrandom() 在这些情况下不会阻塞,而是立即引发 BlockingIOError .

3.6 新版功能.

os.GRND_RANDOM

如果设置了该位,则从 /dev/random 池而不是 /dev/urandom 池。

3.6 新版功能.