Skip to main content

16.1. os —其他操作系统接口

源代码: Lib/os.py


该模块提供了使用依赖于操作系统的功能的便携式方式。如果只想读取或写入文件,请参阅 open(),如果要操作路径,请参阅 os.path 模块,如果要读取命令行上所有文件中的所有行,请参阅 fileinput 模块。对于创建临时文件和目录,请参见 tempfile 模块,对于高级文件和目录处理,请参阅 shutil 模块。

关于这些功能的可用性的说明:

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

  • 特定操作系统特有的扩展也可通过 os 模块获得,但使用它们当然是对可移植性的威胁。

  • 接受路径或文件名的所有函数接受字节和字符串对象,如果返回路径或文件名,则会生成相同类型的对象。

  • “可用性:Unix”注释意味着此功能通常在Unix系统上找到。它不会在特定操作系统上声称它的存在。

  • 如果没有单独注明,声明“可用性:Unix”的所有功能都支持在构建于Unix内核的Mac OS X上。

注解

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

exception os.error

内置 OSError 异常的别名。

os.name

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

参见

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

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

16.1.1. 文件名,命令行参数和环境变量

在Python中,文件名,命令行参数和环境变量使用字符串类型表示。在某些系统上,将这些字符串解码到字节和从字节解码是必要的,然后将它们传递到操作系统。 Python使用文件系统编码来执行此转换(请参阅 sys.getfilesystemencoding())。

在 3.1 版更改: 在某些系统上,使用文件系统编码的转换可能会失败。在这种情况下,Python使用 surrogateescape编码错误处理程序,这意味着在解码时不可解码的字节由Unicode字符U + DCxx替换,并且这些字节在编码时再次转换为原始字节。

文件系统编码必须保证成功解码128以下的所有字节。如果文件系统编码未能提供此保证,API函数可能会引发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() 将被自动调用。

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

注解

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

注解

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

如果未提供 putenv(),则可以将此映射的修改副本传递到适当的过程创建函数,以使子进程使用已修改的环境。

如果平台支持 unsetenv() 功能,您可以删除此映射中的项以取消设置环境变量。当从 os.environ 中删除项目时,以及当调用 pop()clear() 方法之一时,将自动调用 unsetenv()

os.environb

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

environb 仅在 supports_bytes_environ 为True时可用。

3.2 新版功能.

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

这些功能在 文件和目录 中描述。

os.fsencode(filename)

路径样 filename 编码为使用 'surrogateescape' 错误处理程序编写的文件系统或Windows上的 'strict';返回 bytes 不变。

fsdecode() 是反向功能。

3.2 新版功能.

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

os.fsdecode(filename)

解码 路径样 filename 从使用 'surrogateescape' 错误处理程序编码的文件系统或Windows上的 'strict';返回 str 不变。

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()

可用性:大多数风格的Unix,Windows。

os.getenvb(key, default=None)

返回环境变量 key 的值(如果存在)或 default (如果不存在)。 keydefault,结果是字节。

getenvb() 仅在 supports_bytes_environ 为True时可用。

可用性:大多数风味的Unix。

3.2 新版功能.

os.get_exec_path(env=None)

返回在启动进程时将搜索命名可执行文件(类似于shell)的目录列表。 env,当指定时,应该是一个环境变量字典来查找PATH。默认情况下,当 envNone 时,使用 environ

3.2 新版功能.

os.getegid()

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

可用性:Unix。

os.geteuid()

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

可用性:Unix。

os.getgid()

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

可用性:Unix。

os.getgrouplist(user, group)

user 所属的组标识的返回列表。如果 group 不在列表中,则包括它;通常,group 被指定为来自 user 的密码记录的组ID字段。

可用性:Unix。

3.3 新版功能.

os.getgroups()

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

可用性:Unix。

注解

在Mac OS X上,getgroups() 行为与其他Unix平台有些不同。如果Python解释器是使用 10.5 或更早版本的部署目标构建的,则 getgroups() 返回与当前用户进程相关联的有效组ID的列表;此列表限于系统定义的条目数(通常为16个),如果适当特权,可以通过调用 setgroups() 来修改。如果使用大于 10.5 的部署目标构建,则 getgroups() 返回与进程的有效用户标识相关联的用户的当前组访问列表;组访问列表可以在进程的生存期内改变,它不受到对 setgroups() 的调用的影响,并且其长度不限于16.可以使用 sysconfig.get_config_var() 来获得部署目标值 MACOSX_DEPLOYMENT_TARGET

os.getlogin()

返回在进程的控制终端上登录的用户的名称。对于大多数目的,使用环境变量 LOGNAMEUSERNAME 来查找用户是谁是更有用的,或者 pwd.getpwuid(os.getuid())[0] 来获取当前真实用户ID的登录名称。

可用性:Unix,Windows。

os.getpgid(pid)

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

可用性:Unix。

os.getpgrp()

返回当前进程组的ID。

可用性:Unix。

os.getpid()

返回当前进程标识。

os.getppid()

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

可用性:Unix,Windows。

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

os.getpriority(which, who)

获取程序调度优先级。值 whichPRIO_PROCESSPRIO_PGRPPRIO_USER 中的一个,并且相对于 whichPRIO_PROCESS 的进程标识符,PRIO_PGRP 的进程组标识符,以及 PRIO_USER 的用户ID)解释 whowho 的零值分别表示调用进程,调用进程的进程组或调用进程的真实用户ID。

可用性:Unix。

3.3 新版功能.

os.PRIO_PROCESS
os.PRIO_PGRP
os.PRIO_USER

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

可用性:Unix。

3.3 新版功能.

os.getresuid()

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

可用性:Unix。

3.2 新版功能.

os.getresgid()

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

可用性:Unix。

3.2 新版功能.

os.getuid()

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

可用性:Unix。

os.initgroups(username, gid)

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

可用性:Unix。

3.2 新版功能.

os.putenv(key, value)

将名为 key 的环境变量设置为字符串 value。这种对环境的改变影响以 os.system()popen()fork()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)

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

可用性:Unix。

os.setgid(gid)

设置当前进程的组ID。

可用性:Unix。

os.setgroups(groups)

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

可用性:Unix。

注解

在Mac OS X上,groups 的长度不能超过系统定义的有效组ID的最大数量,通常为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)

设置节目调度优先级。值 whichPRIO_PROCESSPRIO_PGRPPRIO_USER 中的一个,并且相对于 whichPRIO_PROCESS 的进程标识符,PRIO_PGRP 的进程组标识符,以及 PRIO_USER 的用户ID)解释 whowho 的零值分别表示调用进程,调用进程的进程组或调用进程的真实用户ID。 priority 是一个介于-20到19之间的值。默认优先级为0;较低的优先级导致更有利的调度。

可用性:Unix

3.3 新版功能.

os.setregid(rgid, egid)

设置当前进程的实际和有效组标识。

可用性:Unix。

os.setresgid(rgid, egid, sgid)

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

可用性:Unix。

3.2 新版功能.

os.setresuid(ruid, euid, suid)

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

可用性:Unix。

3.2 新版功能.

os.setreuid(ruid, euid)

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

可用性:Unix。

os.getsid(pid)

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

可用性:Unix。

os.setsid()

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

可用性:Unix。

os.setuid(uid)

设置当前进程的用户ID。

可用性:Unix。

os.strerror(code)

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

os.supports_bytes_environ

True,如果环境的本机操作系统类型是字节(例如Windows上的 False)。

3.2 新版功能.

os.umask(mask)

设置当前数字umask并返回上一个umask。

os.uname()

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

  • sysname - 操作系统名称

  • nodename - 网络上的机器名称(实现定义)

  • release - 操作系统发布

  • version - 操作系统版本

  • machine - 硬件标识符

为了向后兼容性,此对象也是可迭代的,其行为类似于包含 sysnamenodenamereleaseversionmachine 的五元组。

一些系统将 nodename 截断为8个字符或前导组件;一个更好的方式来获取主机名是 socket.gethostname() 或甚至 socket.gethostbyaddr(socket.gethostname())

可用性:最近的Unix版本。

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

os.unsetenv(key)

取消设置(删除)名为 key 的环境变量。对环境的这种变化影响以 os.system()popen()fork()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 相关联的文件描述符。注意,直接使用文件描述符将绕过文件对象方法,忽略诸如数据的内部缓冲等方面。

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.device_encoding(fd)

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

os.dup(fd)

返回文件描述符 fd 的副本。新文件描述符是 不可继承

在Windows上,当复制标准流(0:stdin,1:stdout,2:stderr)时,新的文件描述符是 可继承

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

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

将文件描述符 fd 重复到 fd2,如果需要,关闭后者。文件描述符 fd2 默认是 可继承,或者如果 inheritableFalse,则不可继承。

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

os.fchmod(fd, mode)

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

可用性:Unix。

os.fchown(fd, uid, gid)

fd 给出的文件的所有者和组ID更改为数字 uidgid。要保留其中一个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。如果主机系统不支持 name 的特定值,即使它包含在 pathconf_names 中,也会针对错误号使用 errno.EINVAL 引发 OSError

从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 对应的文件,以使其大小最多为 length 字节。从Python 3.3开始,这相当于 os.truncate(fd, length)

可用性:Unix,Windows。

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

os.get_blocking(fd)

获取文件描述符的阻塞模式:如果 O_NONBLOCK 标志被设置,则为 False,如果标志被清除,则为 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_LOCKF_TLOCKF_ULOCKF_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)

将文件描述符 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=0o777, *, dir_fd=None)

打开文件 path 并根据 flags 设置各种标志,并且可能根据 mode 设置其模式。当计算 mode 时,首先掩蔽当前umask值。返回新打开的文件的文件描述符。新文件描述符是 不可继承

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

此功能可以使用 dir_fd 参数支持 相对于目录描述符的路径

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

注解

此功能适用于低级I/O。对于正常使用,使用内置函数 open(),它返回一个与 file objectread() write() 方法(以及更多)。要在文件对象中包装文件描述符,请使用 fdopen()

3.3 新版功能: dir_fd 参数。

在 3.5 版更改: 如果系统调用中断并且信号处理程序不引发异常,则此函数现在重试系统调用,而不是引发 InterruptedError 异常(请参阅 PEP 475 的原理)。

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

以下常数是 flags 参数到 open() 函数的选项。它们可以使用按位或运算符 | 组合。其中一些在所有平台上不可用。有关其可用性和使用的说明,请参阅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_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 Kernel 3.11或更高版本上可用。

os.openpty()

打开一个新的伪终端对。分别为pty和tty返回一对文件描述符 (master, slave)。新的文件描述符是 不可继承。对于(稍微)更便携的方法,使用 pty 模块。

可用性:一些风味的Unix。

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

os.pipe()

创建管道。返回一对文件描述符 (r, w),分别用于读取和写入。新文件描述符是 不可继承

可用性:Unix,Windows。

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

os.pipe2(flags)

以原子方式创建具有 flags 集的管道。 flags 可以通过将这些值中的一个或多个ORing在一起来构建:O_NONBLOCKO_CLOEXEC。返回一对可用于读取和写入的文件描述符 (r, w)

可用性:一些风味的Unix。

3.3 新版功能.

os.posix_fallocate(fd, offset, len)

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

可用性:Unix。

3.3 新版功能.

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

宣布意图以特定模式访问数据,从而允许内核进行优化。该建议适用于由 fd 指定的文件的区域,从 offset 开始,并继续为 len 字节。 advicePOSIX_FADV_NORMALPOSIX_FADV_SEQUENTIALPOSIX_FADV_RANDOMPOSIX_FADV_NOREUSEPOSIX_FADV_WILLNEEDPOSIX_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() 返回的文件描述符。要读取由内置函数 open()popen()fdopen()sys.stdin 返回的“文件对象”,请使用其 read()readline() 方法。

在 3.5 版更改: 如果系统调用中断并且信号处理程序不引发异常,则此函数现在重试系统调用,而不是引发 InterruptedError 异常(请参阅 PEP 475 的原理)。

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

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

第一个函数符号由定义 sendfile() 的所有平台支持。

在Linux上,如果 offset 被给定为 None,则从 in 的当前位置读取字节,并且更新 in 的位置。

第二种情况可以在Mac OS X和FreeBSD上使用,其中 headerstrailers 是在写入来自 in 的数据之前和之后写入的任意序列的缓冲器。它返回与第一种情况相同。

在Mac OS X和FreeBSD上,count 的值为0指定发送,直到达到 in 的结束。

所有平台都支持sockets作为 out 文件描述符,并且一些平台也允许其他类型(例如常规文件,管道)。

跨平台应用程序不应使用 headerstrailersflags 参数。

可用性: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 读入一些可变的 字节状对象 buffersreadv() 将数据传输到每个缓冲区,直到它满了,然后移动到序列中的下一个缓冲区,以保持剩余的数据。 readv() 返回读取的字节总数(可能小于所有对象的总容量)。

可用性:Unix。

3.3 新版功能.

os.tcgetpgrp(fd)

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

可用性:Unix。

os.tcsetpgrp(fd, pg)

将与 fdos.open() 返回的打开文件描述符)关联的进程组设置为 pg

可用性:Unix。

os.ttyname(fd)

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

可用性: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)

buffers 的内容写入文件描述符 fdbuffers 必须是 字节状对象 的序列。缓冲区按数组顺序处理。在继续到第二个缓冲区之前写入第一个缓冲区的整个内容,依此类推。操作系统可以对可以使用的缓冲区数量设置限制(sysconf()值SC_IOV_MAX)。

writev() 将每个对象的内容写入文件描述符,并返回写入的总字节数。

可用性:Unix。

3.3 新版功能.

16.1.4.1. 查询终端的大小

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 是低级实现。

可用性:Unix,Windows。

class os.terminal_size

元组的子类,保存终端窗口大小的 (columns, lines)

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_fdfollow_symlinks 参数,那么在提供 path 作为文件描述符时指定其中一个参数是一个错误。

  • 相对于目录描述符的路径: 如果 dir_fd 不是 None,它应该是一个指向目录的文件描述符,并且操作的路径应该是相对的;路径将相对于该目录。如果路径是绝对路径,则忽略 dir_fd。 (对于POSIX系统,Python会调用 ...atf...at 版本的函数。)

    您可以使用 os.supports_dir_fd 检查您的平台是否支持 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 中的一个或多个的包含性OR来测试许可。如果允许访问,返回 True,否则返回 False。有关详细信息,请参阅Unix手册页 access(2)

此功能可以支持指定 相对于目录描述符的路径不遵循符号链接

如果 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()

注解

即使 access() 指示它们将成功,I/O操作也可能失败,特别是对于可能具有超出通常的POSIX许可位模型的许可语义的网络文件系统的操作。

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

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

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

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

os.chdir(path)

将当前工作目录更改为 path

此功能可以支持 指定文件描述符。描述符必须引用打开的目录,而不是打开的文件。

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

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

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

path 的标志设置为数字 flagsflags 可以采用以下值的组合(按位或)(如 stat 模块中定义的):

此功能可以支持 不遵循符号链接

可用性:Unix。

3.3 新版功能: follow_symlinks 参数。

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

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

path 的模式更改为数字 modemode 可以采用以下值之一(如 stat 模块中定义的)或它们的按位或它们的组合:

此功能可以支持 指定文件描述符相对于目录描述符的路径不遵循符号链接

注解

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

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

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

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

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

此功能可以支持 指定文件描述符相对于目录描述符的路径不遵循符号链接

有关接受除数字ID之外的名称的更高级别函数,请参阅 shutil.chown()

可用性:Unix。

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

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

os.chroot(path)

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

可用性:Unix。

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

os.fchdir(fd)

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

可用性:Unix。

os.getcwd()

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

os.getcwdb()

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

os.lchflags(path, flags)

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

可用性:Unix。

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

os.lchmod(path, mode)

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

可用性:Unix。

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

os.lchown(path, uid, gid)

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

可用性:Unix。

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

创建指向名为 dstsrc 的硬链接。

此功能可以支持指定 src_dir_fd 和/或 dst_dir_fd 以提供 相对于目录描述符的路径不遵循符号链接

可用性:Unix,Windows。

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

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

在 3.6 版更改: 接受 srcdstpath-like object

os.listdir(path='.')

返回包含 path 给出的目录中条目名称的列表。该列表是任意顺序,并且不包括特殊条目 '.''..',即使它们存在于目录中。

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

此功能也可以支持 指定文件描述符;文件描述符必须引用一个目录。

注解

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

参见

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

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

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

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

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

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

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

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

此功能也可以支持 相对于目录描述符的路径

参见

stat() 功能。

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

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

在 3.6 版更改: 接受 srcdstpath-like object

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

创建一个名为 path 的数字模式为 mode 的目录。

如果目录已经存在,则引发 FileExistsError

在某些系统上,mode 被忽略。在使用它时,首先掩蔽当前umask值。如果除了最后9个位(即 mode 的八进制表示的最后3位)之外的位被设置,它们的意义是平台相关的。在某些平台上,它们被忽略,您应该明确地调用 chmod() 来设置它们。

此功能也可以支持 相对于目录描述符的路径

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

3.3 新版功能: dir_fd 参数。

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

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

递归目录创建功能。像 mkdir(),但使所有中间级目录需要包含叶子目录。

mode 参数传递给 mkdir();见 mkdir()描述 如何解释。

如果 exist_okFalse (默认值),则如果目标目录已存在,则会引发 OSError

注解

如果要创建的路径元素包括 pardir (egg在UNIX系统上的“..”),makedirs() 将会变得困惑。

此函数正确处理UNC路径。

3.2 新版功能: exist_ok 参数。

在 3.4.1 版更改: 在Python 3.4.1之前,如果 exist_okTrue 并且目录已存在,则 makedirs() 仍然会在 mode 与现有目录的模式不匹配时产生错误。由于这种行为不可能安全地实现,它在Python 3.4.1中被删除。参见 issue 21082

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

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

创建名为 path 的带有数字模式 mode 的FIFO(命名管道)。首先从模式中屏蔽当前umask值。

此功能也可以支持 相对于目录描述符的路径

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

可用性:Unix。

3.3 新版功能: dir_fd 参数。

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

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

创建名为 path 的文件系统节点(文件,设备专用文件或命名管道)。 mode 指定要使用的许可权和要创建的节点的类型,与 stat.S_IFREGstat.S_IFCHRstat.S_IFBLKstat.S_IFIFO (这些常量在 stat 中可用)中的一个组合(按位或)。对于 stat.S_IFCHRstat.S_IFBLKdevice 定义新创建的设备专用文件(可能使用 os.makedev()),否则将被忽略。

此功能也可以支持 相对于目录描述符的路径

可用性:Unix。

3.3 新版功能: dir_fd 参数。

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

os.major(device)

从原始设备号(通常是 stat 中的 st_devst_rdev 字段)中提取设备主号。

os.minor(device)

从原始设备号(通常是来自 statst_devst_rdev 字段)提取设备次编号。

os.makedev(major, minor)

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

os.pathconf(path, name)

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

如果 name 是字符串,并且不知道,则会引发 ValueError。如果主机系统不支持 name 的特定值,即使它包含在 pathconf_names 中,也会针对错误号使用 errno.EINVAL 引发 OSError

此功能可以支持 指定文件描述符

可用性:Unix。

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

os.pathconf_names

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

可用性:Unix。

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

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

此功能也可以支持 相对于目录描述符的路径

可用性:Unix,Windows

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

3.3 新版功能: dir_fd 参数。

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

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

删除(删除)文件 path。如果 path 是目录,则引发 OSError。使用 rmdir() 删除目录。

此功能可以支持 相对于目录描述符的路径

在Windows上,尝试删除正在使用的文件会导致引发异常;在Unix上,将删除目录条目,但是在原始文件不再使用之前,不会提供分配给该文件的存储空间。

此函数在语义上与 unlink() 相同。

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

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

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

将文件或目录 src 重命名为 dst。如果 dst 是目录,则会引发 OSError。在Unix上,如果 dst 存在并且是一个文件,如果用户有权限,它将被静默替换。如果 srcdst 位于不同的文件系统上,则操作可能会在某些Unix风格上失败。如果成功,重命名将是一个原子操作(这是一个POSIX要求)。在Windows上,如果 dst 已经存在,则 OSError 将被引发,即使它是一个文件。

此功能可以支持指定 src_dir_fd 和/或 dst_dir_fd 以提供 相对于目录描述符的路径

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

3.3 新版功能: src_dir_fddst_dir_fd 参数。

在 3.6 版更改: 接受 srcdstpath-like object

os.renames(old, new)

递归目录或文件重命名功能。像 rename() 一样工作,除非创建任何中间目录,使新的路径名良好,首先尝试。在重命名之后,使用 removedirs() 来删除对应于旧名称的最右路径段的目录。

注解

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

在 3.6 版更改: 接受 oldnewpath-like object

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

将文件或目录 src 重命名为 dst。如果 dst 是目录,则会引发 OSError。如果 dst 存在并且是一个文件,如果用户有权限,它将被静默替换。如果 srcdst 位于不同的文件系统上,操作可能会失败。如果成功,重命名将是一个原子操作(这是一个POSIX要求)。

此功能可以支持指定 src_dir_fd 和/或 dst_dir_fd 以提供 相对于目录描述符的路径

3.3 新版功能.

在 3.6 版更改: 接受 srcdstpath-like object

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

删除(删除)目录 path。只有当目录为空时才工作,否则,引发 OSError。为了删除整个目录树,可以使用 shutil.rmtree()

此功能可以支持 相对于目录描述符的路径

3.3 新版功能: dir_fd 参数。

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

os.scandir(path='.')

返回与 path 给出的目录中的条目相对应的 os.DirEntry 对象的迭代器。以任意顺序产生条目,并且不包括特殊条目 '.''..'

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

path 可以是 path-like object。如果 pathbytes 类型(直接或间接通过 PathLike 接口),则每个 os.DirEntrynamepath 属性的类型将是 bytes;在所有其他情况下,它们将是 str 类型。

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() 方法的支持。如果 scandir() 迭代器既不耗尽也不显式关闭,则 ResourceWarning 将在其析构函数中被发出。

该函数接受 path-like object

class os.DirEntry

scandir() 产生的对象,用于公开目录条目的文件路径和其他文件属性。

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

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

因为 os.DirEntry 方法可以进行操作系统调用,他们也可以提高 OSError。如果您需要对错误进行非常精细的控制,则可以在调用 os.DirEntry 方法时捕获 OSError 并酌情处理。

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

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

name

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

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

path

条目的完整路径名称:等效于 os.path.join(scandir_path, entry.name),其中 scandir_pathscandir() path 参数。如果 scandir() path 参数是绝对路径,则路径仅为绝对路径。

如果 scandir() path 参数的类型为 bytes,则 path 属性将为 bytes,否则为 str。使用 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() 以获取最新信息。

在第一个非高速缓存的调用中,在大多数情况下不需要系统调用。具体来说,对于非符号链接,除非某些Unix文件系统(如网络文件系统)返回 dirent.d_type == DT_UNKNOWN,否则Windows或Unix都不需要系统调用。如果条目是符号链接,则需要系统调用遵循符号链接,除非 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() 以获取最新信息。

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

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

stat(*, follow_symlinks=True)

返回此条目的 stat_result 对象。此方法默认情况下遵循符号链接; to stat一个符号链接添加 follow_symlinks=False 参数。

在Unix上,此方法总是需要系统调用。在Windows上,如果 follow_symlinksTrue 并且条目是符号链接,则只需要系统调用。

在Windows上,stat_resultst_inost_devst_nlink 属性始终设置为零。调用 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 接口的支持。在Windows上添加了对 bytes 路径的支持。

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

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

这个函数通常遵循符号链接;以启动符号链接添加参数 follow_symlinks=False,或使用 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

class os.stat_result

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

属性:

st_mode

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

st_ino

信息节点号。

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

另请参阅 stat_float_times() 函数。

注解

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

文件创建时间。

在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上,某些项目使用虚拟值填充。)

为了向后兼容,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 新版功能: 在Windows上添加了 st_file_attributes 成员。

os.stat_float_times([newvalue])

确定 stat_result 是否将时间戳表示为浮点对象。如果 newvalueTrue,未来调用 stat() 返回浮点,如果它是 False,未来调用返回int。如果省略 newvalue,则返回当前设置。

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

Python现在默认返回浮点值。使用浮点时间戳不能正常工作的应用程序可以使用此功能恢复旧的行为。

时间戳的分辨率(即最小的可能分数)取决于系统。有些系统只支持第二分辨率;在这些系统上,分数将总是为零。

建议该设置仅在程序启动时在 __main__ 模块中更改;库不应更改此设置。如果应用程序使用的库在处理浮点时间戳时工作不正确,则此应用程序应关闭该功能,直到库被更正。

3.3 版后已移除.

os.statvfs(path)

在给定路径上执行 statvfs() 系统调用。返回值是其属性描述给定路径上的文件系统的对象,并且对应于 statvfs 结构的成员,即:f_bsizef_frsizef_blocksf_bfreef_bavailf_filesf_ffreef_favailf_flagf_namemax

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

为基于GNU/glibc的系统定义了附加的模块级常量。这些是 ST_NODEV (不允许访问设备专用文件),ST_NOEXEC (禁止程序执行),ST_SYNCHRONOUS (写入同时同步),ST_MANDLOCK (允许FS上的强制锁),ST_WRITE (写入文件/目录/符号链接),ST_APPEND (附加文件),ST_IMMUTABLE (不可变文件),ST_NOATIME (不更新访问时间),ST_NODIRATIME (不更新目录访问时间),ST_RELATIME (相对于mtime/ctime更新atime)。

此功能可以支持 指定文件描述符

可用性: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

os.supports_dir_fd

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

要检查特定函数是否允许为其 path 参数指定打开的文件描述符,请在 supports_fd 上使用 in 运算符。作为示例,此表达式确定 os.chdir() 在您的本地平台上调用时是否接受打开的文件描述符:

os.chdir in os.supports_fd

3.3 新版功能.

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

要检查特定函数是否允许使用其 follow_symlinks 参数,请在 supports_follow_symlinks 上使用 in 运算符。作为示例,该表达式确定 os.stat()follow_symlinks 参数是否在本地可用:

os.stat in os.supports_follow_symlinks

3.3 新版功能.

创建指向 src 的符号链接,名为 dst

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

在Windows 6.0(Vista)中引入了符号链接支持。 symlink() 将在6.0之前的Windows版本上提出 NotImplementedError

此功能可以支持 相对于目录描述符的路径

注解

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

当函数被非特权用户调用时,引发 OSError

可用性:Unix,Windows。

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

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

在 3.6 版更改: 接受 srcdstpath-like object

os.sync()

强制写入一切到磁盘。

可用性:Unix。

3.3 新版功能.

os.truncate(path, length)

截断与 path 对应的文件,以使其大小最多为 length 字节。

此功能可以支持 指定文件描述符

可用性:Unix,Windows。

3.3 新版功能.

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

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

删除(删除)文件 path。此函数在语义上与 remove() 相同; unlink 名称是其传统的Unix名称。有关更多信息,请参阅 remove() 的文档。

3.3 新版功能: dir_fd 参数。

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

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

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

utime() 采用两个可选参数 timesns。这些指定了 path 上设置的时间,使用方法如下:

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

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

  • 如果 timesNone 并且 ns 未指定,则这等同于指定 ns=(atime_ns, mtime_ns),其中两个时间都是当前时间。

timesns 指定元组是一个错误。

是否可以为 path 指定目录取决于操作系统是否将目录实现为文件(例如,Windows不会)。请注意,您在此设置的确切时间可能不会由随后的 stat() 调用返回,具体取决于操作系统记录访问和修改时间的分辨率;见 stat()。保留精确时间的最好方法是使用来自具有 ns 参数到 utimeos.stat() 结果对象的 st_atime_nsst_mtime_ns 字段。

此功能可以支持 指定文件描述符相对于目录描述符的路径不遵循符号链接

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)

dirpath 是一个字符串,是目录的路径。 dirnamesdirpath 中子目录的名称列表(不包括 '.''..')。 filenamesdirpath 中非目录文件的名称列表。请注意,列表中的名称不包含路径组件。要获取 dirpath 中的文件或目录的完整路径(以 top 开头),请执行 os.path.join(dirpath, name)

如果可选参数 topdownTrue 或未指定,则在其任何子目录(目录自上而下生成)的三元组之前生成目录的三元组。如果 topdownFalse,则目录的三元组在其所有子目录的三元组之后生成(目录是从下到上生成的)。不管 topdown 的值,在生成目录及其子目录的元组之前检索子目录的列表。

topdownTrue 时,呼叫者可以就地修改 dirnames 列表(可能使用 del 或片段分配),并且 walk() 将只递归到其名称保留在 dirnames 中的子目录中;这可以用于修剪搜索,施加特定的访问顺序,或甚至在再次恢复 walk() 之前通知 walk() 关于呼叫者创建或重命名的目录。当 topdownFalse 时修改 dirnames 对行走的行为没有影响,因为在自底向上模式中,dirnames 中的目录是在 dirpath 自身生成之前生成的。

默认情况下,来自 listdir() 调用的错误将被忽略。如果指定可选参数 onerror,它应该是一个函数;它将使用一个参数(一个 OSError 实例)进行调用。它可以报告错误以继续步行,或提出异常以中止步行。请注意,文件名可用作异常对象的 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

在下一个示例中(简单实现 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))

在 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

dirpathdirnamesfilenameswalk() 输出相同,dirfd 是指向目录 dirpath 的文件描述符。

此功能始终支持 相对于目录描述符的路径不遵循符号链接。但是请注意,与其他功能不同,follow_symlinksfwalk() 默认值为 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 新版功能.

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

16.1.5.1. Linux扩展属性

3.3 新版功能.

这些功能仅在Linux上可用。

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

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

此功能可支持 指定文件描述符不遵循符号链接

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

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

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

此功能可支持 指定文件描述符不遵循符号链接

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

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

path 中删除扩展文件系统属性 attributeattribute 应该是字节或str(直接或间接通过 PathLike 接口)。如果它是一个字符串,它使用文件系统编码进行编码。

此功能可支持 指定文件描述符不遵循符号链接

在 3.6 版更改: 接受 pathattributepath-like object

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

path 上的扩展文件系统属性 attribute 设置为 valueattribute 必须是没有嵌入NUL的字节或字节(直接或间接通过 PathLike 接口)。如果它是一个str,它使用文件系统编码进行编码。 flags 可以是 XATTR_REPLACEXATTR_CREATE。如果给出 XATTR_REPLACE 并且该属性不存在,则将产生 EEXISTS。如果给出 XATTR_CREATE 且属性已存在,则不会创建该属性,并将引发 ENODATA

此功能可支持 指定文件描述符不遵循符号链接

注解

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

在 3.6 版更改: 接受 pathattributepath-like object

os.XATTR_SIZE_MAX

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

os.XATTR_CREATE

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

os.XATTR_REPLACE

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

16.1.6. 流程管理

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

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

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

立即替换当前进程。打开的文件对象和描述符不刷新,因此如果这些打开的文件可能有数据缓冲,您应该在调用 exec* 函数之前使用 sys.stdout.flush()os.fsync() 清除它们。

exec* 函数的“l”和“v”变体在命令行参数的传递方式上不同。如果参数的数量在代码写入时是固定的,那么“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

可用性:Unix,Windows。

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

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

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,在父代中返回子代的进程ID。如果出现错误,则引发 OSError

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

警告

对于通过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_EVENTsignal.CTRL_BREAK_EVENT 信号是特殊信号,它们只能被发送到共享公共控制台窗口的控制台进程,例如一些子进程。 sig 的任何其他值将导致进程被TerminateProcess API无条件地终止,并且退出代码将设置为 sig。 Windows版本的 kill() 另外需要处理句柄被杀死。

参见 signal.pthread_kill()

3.2 新版功能: Windows支持。

os.killpg(pgid, sig)

将信号 sig 发送到过程组 pgid

可用性:Unix。

os.nice(increment)

increment 添加到流程的“优雅”。返回新的美好。

可用性: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)

在新进程中执行程序 path

(请注意,subprocess 模块提供了更强大的功能,用于生成新进程和检索其结果;使用该模块比使用这些功能更好,特别是检查 使用 subprocess 模块替换旧功能 部分。

如果 modeP_NOWAIT,则此函数返回新进程的进程标识;如果 modeP_WAIT,则返回进程的退出代码(如果它正常退出)或 -signal,其中 signal 是终止进程的信号。在Windows上,进程id实际上是进程句柄,因此可以与 waitpid() 函数一起使用。

spawn* 函数的“l”和“v”变体在命令行参数的传递方式上不同。如果参数的数量在代码写入时是固定的,那么“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)

可用性:Unix,Windows。 spawnlp()spawnlpe()spawnvp()spawnvpe() 在Windows上不可用。 spawnle()spawnve() 在Windows上不是线程安全的;我们建议您改用 subprocess 模块。

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

os.P_NOWAIT
os.P_NOWAITO

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

可用性:Unix,Windows。

os.P_WAIT

spawn* 系列函数的 mode 参数的可能值。如果给定为 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])

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

当没有指定 operation'open' 时,这就像在Windows资源管理器中双击文件,或者从交互式命令shell向 start 命令提供文件名作为参数:该文件用任何应用程序(如果有)打开它的扩展关联。

当给出另一个 operation 时,它必须是一个“命令动词”,指定对文件应该做什么。由Microsoft记录的常见动词是 'print''edit' (用于文件)以及 'explore''find' (用于目录)。

相关应用程序启动后,startfile() 将立即返回。没有任何选项可以等待应用程序关闭,并且无法检索应用程序的退出状态。 path 参数是相对于当前目录的。如果要使用绝对路径,请确保第一个字符不是斜杠('/');如果是底层Win32 ShellExecute() 功能不工作。使用 os.path.normpath() 函数确保为Win32正确编码路径。

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

可用性:Windows。

os.system(command)

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

在Unix上,返回值是以 wait() 指定的格式编码的进程的退出状态。注意,POSIX不指定C system() 函数的返回值的含义,因此Python函数的返回值是系统相关的。

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

subprocess 模块提供了更强大的功能,用于生成新进程和检索其结果;使用该模块比使用此功能更可取。有关一些有用的配方,请参阅 subprocess 文档中的 使用 subprocess 模块替换旧功能 部分。

可用性:Unix,Windows。

os.times()

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

  • user - 用户时间

  • system - 系统时间

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

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

  • elapsed - 自过去的固定点以来的实际时间

为了向后兼容,该对象也表现为按照该顺序包含 usersystemchildren_userchildren_systemelapsed 的五元组。

请参阅Unix手册页 times(2) 或相应的Windows Platform API文档。在Windows上,只有 usersystem 是已知的;其他属性为零。

可用性:Unix,Windows。

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

os.wait()

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

可用性:Unix。

os.waitid(idtype, id, options)

等待一个或多个子进程的完成。 idtype 可以是 P_PIDP_PGIDP_ALLid 指定要等待的pid。 optionsWEXITEDWSTOPPEDWCONTINUED 中的一个或多个的ORing构建,并且另外可以与 WNOHANGWNOWAIT ORed。返回值是表示包含在 siginfo_t 结构中的数据的对象,即:si_pidsi_uidsi_signosi_statussi_codeNone,如果指定了 WNOHANG 并且没有处于可等待状态的子节点。

可用性: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 的值影响,整数 options 的值应该是 0 以进行正常操作。

如果 pid0 更大,waitpid() 要求该特定过程的状态信息。如果 pid0,请求为任何孩子的当前进程的进程组中的状态。如果 pid-1,请求属于当前进程的任何子女。如果 pid 小于 -1,状态请求为处理组 -pidpid 的绝对值)在任何过程。

当syscall返回-1时,OSError 的值为errno。

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

在 3.5 版更改: 如果系统调用中断并且信号处理程序不引发异常,则此函数现在重试系统调用,而不是引发 InterruptedError 异常(请参阅 PEP 475 的原理)。

os.wait3(options)

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

可用性:Unix。

os.wait4(pid, options)

waitpid() 类似,除了包含子进程id,退出状态指示和资源使用信息的3元素元组以外。有关资源使用信息的详细信息,请参阅 resourcegetrusage()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,则返回 True,否则返回 False

可用性:Unix。

os.WEXITSTATUS(status)

如果 WIFEXITED(status) 为真,则将整数参数返回到 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

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

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 是上面的调度策略常量之一。 paramsched_param 实例。

os.sched_getscheduler(pid)

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

os.sched_setparam(pid, param)

使用PID pid 为进程设置调度参数。 pid 为0表示调用进程。 paramsched_param 实例。

os.sched_getparam(pid)

将调度参数返回为具有PID pid 的进程的 sched_param 实例。 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集合的整数的迭代。

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 中,也会针对错误号使用 errno.EINVAL 引发 OSError

可用性:Unix。

os.confstr_names

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

可用性:Unix。

os.cpu_count()

返回系统中的CPU数。未确定时返回 None

此数字不等于当前进程可以使用的CPU数。可以使用 len(os.sched_getaffinity(0)) 获得可用的CPU数

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

操作系统用于分隔路径名组件的字符。这是用于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

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

os.linesep

用于分隔(或相反,终止)当前平台上的行的字符串。这可以是单个字符,例如用于POSIX的 '\n',或多个字符,例如,用于Windows的 '\r\n'。在以文本模式打开文件时,不要使用 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)

3.3 新版功能.

16.1.9. 随机数

os.getrandom(size, flags=0)

获取 size 随机字节。该函数可以返回比请求的少的字节。

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

getrandom() 依赖于从设备驱动器和其他环境噪声源收集的熵。不必要地读取大量数据将对 /dev/random/dev/urandom 设备的其他用户产生负面影响。

flags参数是一个位掩码,可以包含以下值中的一个或多个:os.GRND_RANDOMGRND_NONBLOCK

另见 Linux getrandom()手册页

可用性:Linux 3.17及更高版本。

3.6 新版功能.

os.urandom(size)

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

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

在Linux上,如果 getrandom() 系统调用可用,它将在阻塞模式下使用:block,直到系统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/random 读取时,getrandom() 阻止如果没有随机字节可用,并且当从 /dev/urandom 读取时,它阻止熵池尚未被初始化。

如果设置了 GRND_NONBLOCK 标志,则 getrandom() 在这些情况下不阻塞,而是立即提高 BlockingIOError

3.6 新版功能.

os.GRND_RANDOM

如果该位置位,则从 /dev/random 池而不是 /dev/urandom 池中抽取随机字节。

3.6 新版功能.