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

源代码: Lib / os.py

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

注意这些功能的可用性︰

  • Python的所有内建操作系统相关模块的设计是这样的,只要相同的功能可用,它使用相同的接口;例如,函数os.stat(path)以相同的格式返回关于路径的统计信息(这恰好源于POSIX接口)。
  • 通过os模块也可以获得特定操作系统特有的扩展,但使用它们当然是对可移植性的威胁。
  • 接受路径或文件名的所有函数接受字节和字符串对象,如果返回路径或文件名,则会生成相同类型的对象。
  • “可用的平台:Unix”的标注表示该函数通常只在Unix系统上能找到。它不是在声明它只存在于某个具体的操作系统上。
  • 如果没有单独地标注,所有声明“可用的平台:Unix”的函数都支持Mac OS X,因为它构建在Unix内核上。

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

exception os.error

内置 OSError 异常的别名.

os.name

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

另请参阅

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

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

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

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

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

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

16.1.2. 进程参数

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

os.ctermid()

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

可用性:Unix。

os.environ

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

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

如果平台支持putenv()函数,则此映射可用于修改环境以及查询环境。putenv()将在映射修改时自动调用。

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

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

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

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

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

os.environb

字节版本的environ:a mapping对象表示环境作为字节字符串。environ and environb are synchronized (modify environb updates environ, and vice versa).

environb仅在supports_bytes_environ为True时可用。

版本3.2中的新功能。

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

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

os.fsencode(filename)

在Windows上将filename编码为'surrogateescape'错误处理程序或'strict'返回bytes不变。

fsdecode()是反向功能。

版本3.2中的新功能。

os.fsdecode(filename)

在Windows上从'surrogateescape'错误处理程序或'strict'编码的文件系统中解码filename返回str不变。

fsencode()是反向函数。

版本3.2中的新功能。

os.getenv(key, default=None)

返回环境变量的值(如果存在)或默认(如果不存在)。默认,结果为str。

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

可以的平台:大部分Unix、Windows。

os.getenvb(key, default=None)

返回环境变量的值(如果存在)或默认(如果不存在)。默认,结果为字节。

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

版本3.2中的新功能。

os.get_exec_path(env=None)

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

版本3.2中的新功能。

os.getegid()

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

可用的平台:Unix。

os.geteuid()

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

可用的平台:Unix。

os.getgid()

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

可用的平台:Unix。

os.getgrouplist(user, group)

用户所属的组ID的返回列表。如果不在列表中,则包括在内;通常,从用户的密码记录中将指定为组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()

Return the name of the user logged in on the controlling terminal of the process.对于大多数用途,使用环境变量 LOGNAME USERNAME is,或pwd.getpwuid(os.getuid())[0]来获取当前真实用户ID的登录名。

可用的平台:Unix、Windows。

os.getpgid(pid)

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

可用的平台:Unix。

os.getpgrp()

返回当前进程组的ID。

可用的平台:Unix。

os.getpid()

返回当前进程id。

os.getppid()

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

可用的平台:Unix、Windows。

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

os.getpriority(which, who)

获取程序调度优先级。The value which is one of PRIO_PROCESS, PRIO_PGRP, or PRIO_USER, and who is interpreted relative to which (a process identifier for PRIO_PROCESS, process group identifier for PRIO_PGRP, and a user ID for PRIO_USER). who的零值分别表示调用进程,调用进程的进程组或调用进程的真实用户ID。

可用的平台:Unix。

版本3.3中的新功能。

os.PRIO_PROCESS
os.PRIO_PGRP
os.PRIO_USER

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

可用的平台:Unix。

版本3.3中的新功能。

os.getresuid()

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

可用的平台:Unix。

版本3.2中的新功能。

os.getresgid()

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

可用的平台:Unix。

版本3.2中的新功能。

os.getuid()

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

可用的平台:Unix。

os.initgroups(username, gid)

以包含指定用户名的所有组加上指定的组ID调用系统的initgroups()来初始化组访问列表。

可用的平台:Unix。

版本3.2中的新功能。

os.putenv(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)

设置程序调度优先级。The value which is one of PRIO_PROCESS, PRIO_PGRP, or PRIO_USER, and who is interpreted relative to which (a process identifier for PRIO_PROCESS, process group identifier for PRIO_PGRP, and a user ID for PRIO_USER). who的零值分别表示调用进程,调用进程的进程组或调用进程的真实用户ID。优先级是范围为-20到19的值。默认优先级为0;较低的优先级导致更有利的调度。

可用的平台:Unix。

版本3.3中的新功能。

os.setregid(rgid, egid)

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

可用的平台:Unix。

os.setresgid(rgid, egid, sgid)

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

可用的平台:Unix。

版本3.2中的新功能。

os.setresuid(ruid, euid, suid)

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

可用的平台:Unix。

版本3.2中的新功能。

os.setreuid(ruid, euid)

设置当前进程的真实的和有效的用户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如果环境的本机操作系统类型为字节(例如。False)。

版本3.2中的新功能。

os.umask(mask)

设置当前的umask数值并返回前一个umask。

os.uname()

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

  • sysname - 操作系统名称
  • nodename - 网络上的机器名称(实现定义)
  • release - 操作系统版本
  • version - 操作系统版本
  • machine - 硬件标识符

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

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

可用的平台:最近的Unix版本。

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

os.unsetenv(key)

取消设置(删除)名为的环境变量。这种对环境的改变影响以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相关联的文件描述器。Note that using the file descriptor directly will bypass the file object methods, ignoring aspects such as internal buffering of data.

os.close(fd)

关闭文件描述符fd

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

os.closerange(fd_low, fd_high)

关闭所有fd_low(包含)到fd_high(不包含)之间的所有文件描述符,忽略所有错误。相当于(但要快得多):

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

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

os.dup(fd)

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

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

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

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

复制文件描述符fdfd2,如果必要首先关闭后者。默认情况下,文件描述器fd2inheritable,如果可继承False,则不可继承。

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

os.fchmod(fd, mode)

改变由fd 给出的文件的模式为数字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)

强制写入文件描述符为fd 的文件到磁盘中。不会强制更新元数据。

可用的平台:Unix。

该函数在MacOS上不可用。

os.fpathconf(fd, name)

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

如果name是字符串,且不知道,则会引发ValueErrorIf a specific value for name is not supported by the host system, even if it is included in pathconf_names, an OSError is raised with errno.EINVAL for the error number.

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

可用的平台:Unix。

os.fstat(fd)

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

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

另请参阅

stat()函数。

os.fstatvfs(fd)

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

可用的平台:Unix。

os.fsync(fd)

强制写入文件描述符为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)

获取文件的阻塞模式描述器:False如果设置了O_NONBLOCK标志,则True

另请参见set_blocking()socket.socket.setblocking()

可用的平台:Unix。

版本3.5中的新功能。

os.isatty(fd)

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

os.lockf(fd, cmd, len)

在打开的文件上应用,测试或删除POSIX锁描述器。fd是一个打开的文件描述器。cmd指定要使用的命令 - F_LOCKF_TLOCKF_ULOCKF_TESTlen指定要锁定的文件部分。

可用的平台:Unix。

版本3.3中的新功能。

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

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

可用的平台:Unix。

版本3.3中的新功能。

os.lseek(fd, pos, how)

Set the current position of file descriptor fd to position pos, modified by how: SEEK_SET or 0 to set the position relative to the beginning of the file; SEEK_CUR or 1 to set it relative to the current position; SEEK_END or 2 to set it relative to the end of the file. 返回从开始到当前位置的字节数。

os.SEEK_SET
os.SEEK_CUR
os.SEEK_END

lseek()函数的参数。它们的值分别是0、1和2。

版本3.3中的新功能:某些操作系统可能支持其他值,例如os.SEEK_HOLEos.SEEK_DATA

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

打开文件path并根据标志设置各种标志,并根据模式设置其模式。当计算模式时,首先掩蔽当前umask值。返回新打开文件的文件描述符。新文件描述器是non-inheritable

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

此函数可以使用dir_fd参数支持相对于目录描述器的paths relative to directory descriptors

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

该函数的目的是底层I/O。For normal usage, use the built-in function open(), which returns a file object with read() and write() methods (and many more). 要将文件描述器包装在文件对象中,请使用fdopen()

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

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

以下常数是标志参数到open()函数的选项。它们可以使用位或OR操作符号|进行组合。它们中某些不是在所有平台都可用。有关其可用性和使用的说明,请参阅Unix上的打开(2)手册页或Windows上的MSDN

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

这些常数在Unix上Windows可以访问。

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

这些常数只能在Unix上访问。

在版本3.3中更改:添加O_CLOEXEC常数。

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

这些常数只能在Windows上访问。

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

这些常数属于GNU扩展,如果它们没有被C库定义则不存在。

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

os.openpty()

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

可用的平台:某些Unix系统。

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

os.pipe()

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

可用的平台:Unix、Windows。

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

os.pipe2(flags)

使用flags设置原子创建一个管道。flags可以通过将这些值中的一个或多个ORing在一起构造:O_NONBLOCKO_CLOEXEC返回分别用于读取和写入的一对文件描述器(r, w)

可用的平台:某些Unix系统。

版本3.3中的新功能。

os.posix_fallocate(fd, offset, len)

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

可用的平台:Unix。

版本3.3中的新功能。

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

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

可用的平台:Unix。

版本3.3中的新功能。

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

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

可用的平台:Unix。

版本3.3中的新功能。

os.pread(fd, buffersize, offset)

偏移的位置从文件中读取描述器fd它将读取最多buffersize的字节数。文件偏移量保持不变。

可用的平台:Unix。

版本3.3中的新功能。

os.pwrite(fd, str, offset)

bytestring写入文件描述器,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)

偏移开始,将计数字节从中的文件描述器复制到文件描述器输出返回发送的字节数。当达到EOF时返回0。

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

在Linux上,如果offset给定为None,则从中的当前位置读取字节,/ t4>。

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

在Mac OS X和FreeBSD上,计数的值0指定发送,直到结束。

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

跨平台应用程序不应使用尾标标志参数。

可用的平台:Unix。

对于sendfile()的高级包装器,请参阅socket.socket.sendfile()

版本3.3中的新功能。

os.set_blocking(fd, blocking)

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

另请参见get_blocking()socket.socket.setblocking()

可用的平台:Unix。

版本3.5中的新功能。

os.SF_NODISKIO
os.SF_MNOWAIT
os.SF_SYNC

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

可用的平台:Unix。

版本3.3中的新功能。

os.readv(fd, buffers)

从文件中读取描述器fd变成多个可变的bytes-like objects 缓冲区readv()将数据传输到每个缓冲区,直到它满了,然后移动到序列中的下一个缓冲区,以保存其余的数据。readv()返回读取的总字节数(可能小于所有对象的总容量)。

可用的平台:Unix。

版本3.3中的新功能。

os.tcgetpgrp(fd)

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

可用的平台:Unix。

os.tcsetpgrp(fd, pg)

将与fd(由os.open()返回的打开文件描述器)相关的进程组设置为pg

可用的平台:Unix。

os.ttyname(fd)

返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。

可用的平台:Unix。

os.write(fd, str)

str中的字节写入文件描述器fd返回真正写入的字节数。

此函数适用于低级I / O,并且必须应用于os.open()pipe()返回的文件描述器。要写内建函数open()popen()fdopen()sys.stdoutsys.stderr,使用其write()方法。

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

os.writev(fd, buffers)

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

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

可用的平台:Unix。

版本3.3中的新功能。

16.1.4.1. Querying the size of a terminal

版本3.3中的新功能。

os.get_terminal_size(fd=STDOUT_FILENO)

(列, 行)返回终端窗口的大小,类型为terminal_size的元组。

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

如果文件描述器未连接到终端,则会引发OSError

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

可用的平台:Unix、Windows。

class os.terminal_size

一个元组的子类,保存终端窗口大小的(列, 行)

columns

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

lines

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

16.1.4.2. Inheritance of File Descriptors

版本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. Files and Directories

在某些Unix平台上,其中许多功能支持一个或多个这些功能:

  • 指定文件描述器:对于某些函数,path参数不仅可以是给出路径名的字符串,还可以是文件描述器。然后该函数将对描述器所引用的文件进行操作。(对于POSIX系统,Python将调用f...版本的函数。)

    您可以使用os.supports_fd检查路径是否可以指定为平台上的文件描述器。如果它不可用,使用它将引发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 (用户ID/组ID) 去测试 path (路径)自变量访问权限。Note that most operations will use the effective uid/gid, therefore this routine can be used in a suid/sgid environment to test if the invoking user has the specified access to path. mode should be F_OK to test the existence of path, or it can be the inclusive OR of one or more of R_OK, W_OK, and X_OK to test permissions. 如果允许访问,返回True,如果不允许,返回FalseSee the Unix man page access(2) for more information.

此函数可以支持指定paths relative to directory descriptors的路径和not 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()

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

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

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

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

os.chdir(path)

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

此功能可以支持specifying a file descriptorThe descriptor must refer to an opened directory, not an open file.

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

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

Set the flags of path to the numeric flags. 标志可以采用以下值(按stat模块中的定义)的组合(按位或):

此函数可以支持not following symlinks

可用的平台:Unix。

版本3.3中的新功能: follow_symlinks参数。

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

path 模式更改成 mode 数值。模式可以采用以下值之一(按stat模块中的定义)或它们的位或运算组合:

此函数可以支持specifying a file descriptorpaths relative to directory descriptorsnot following symlinks

虽然Windows支持chmod(),但只能使用它设置文件的只读标志(通过stat.S_IWRITEstat.S_IREAD常数或相应的整数值)。All other bits are ignored.

版本3.3中的新功能:添加了将路径指定为打开文件描述器和dir_fdfollow_symlinks参数。

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

path 的所有者、组ID,更改成 uid (用户ID)gid (组ID) 数值。如要保留其中的某个ID不变,设置它为-1。

此函数可以支持specifying a file descriptorpaths relative to directory descriptorsnot following symlinks

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

可用的平台:Unix。

版本3.3中的新功能:添加了对指定路径的打开文件描述器和dir_fdfollow_symlinks参数。

os.chroot(path)

把当前进程根目录更改成 path (路径) 自变量。

可用的平台:Unix。

os.fchdir(fd)

Change the current working directory to the directory represented by the file descriptor fd. The descriptor must refer to an opened directory, not an open file.从Python 3.3开始,这相当于os.chdir(fd)

可用的平台:Unix。

os.getcwd()

返回一条代表当前工作目录的字符串。

os.getcwdb()

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

os.lchflags(path, flags)

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

可用的平台:Unix。

os.lchmod(path, mode)

path 模式更改成 mode 数值。If path is a symlink, this affects the symlink rather than the target. 有关模式的可能值,请参阅chmod()的文档。从Python 3.3开始,这相当于os.chmod(path, 模式, follow_symlinks = False)

可用的平台:Unix。

os.lchown(path, uid, gid)

path 的所有者、组ID,更改成 uid (用户ID)gid (组ID) 数值。This function will not follow symbolic links.从Python 3.3开始,这相当于os.chown(path, uid, gid, follow_symlinks = False)

可用的平台:Unix。

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

This function can support specifying src_dir_fd and/or dst_dir_fd to supply paths relative to directory descriptors, and not following symlinks.

可用的平台:Unix、Windows。

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

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

os.listdir(path='.')

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

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

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

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

另请参阅

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

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

版本3.3中的新功能:添加了对指定路径的打开文件描述器的支持。

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

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

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

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

此功能还可以支持相对于目录描述器的paths relative to directory descriptors

另请参阅

stat()函数。

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

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

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

Create a directory named path with numeric mode mode.

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

On some systems, mode is ignored. Where it is used, the current umask value is first masked out. 如果除了最后9个之外的位(即,设置模式的八进制表示的最后3位数字),它们的含义是平台相关的。在某些平台上,它们被忽略,您应该显式调用chmod()来设置它们。

此功能还可以支持相对于目录描述器的paths relative to directory descriptors

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

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

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

Recursive directory creation function. mkdir(),但使所有中间级目录需要包含叶子目录。

mode参数传递到mkdir();有关如何解释它,请参阅the mkdir() description

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

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

此函数正确处理UNC路径。

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

Changed in version 3.4.1: Before Python 3.4.1, if exist_ok was True and the directory existed, makedirs() would still raise an error if mode did not match the mode of the existing directory. 由于这种行为不可能安全地实现,它在Python 3.4.1中被删除。请参见问题21082

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

Create a FIFO (a named pipe) named path with numeric mode mode. The current umask value is first masked out from the mode.

此功能还可以支持相对于目录描述器的paths relative to directory descriptors

FIFOs are pipes that can be accessed like regular files. FIFO存在,直到它们被删除(例如使用os.unlink())。Generally, FIFOs are used as rendezvous between “client” and “server” type processes: the server opens the FIFO for reading, and the client opens it for writing. 请注意,mkfifo()不会打开FIFO - 它只是创建会合点。

可用的平台:Unix。

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

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

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

此功能还可以支持相对于目录描述器的paths relative to directory descriptors

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

os.major(device)

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

os.minor(device)

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

os.makedev(major, minor)

Compose a raw device number from the major and minor device numbers.

os.pathconf(path, name)

Return system configuration information relevant to a named file. name指定要检索的配置值;它可以是作为定义的系统值的名称的字符串;这些名称在许多标准(POSIX.1,Unix 95,Unix 98和其他)中指定。某些平台还定义了额外的名称。主机操作系统已知的名称在pathconf_names字典中给出。对于不包括在该映射中配置变量,传递一个整数给name 也是可以接收的。

如果name是字符串,且不知道,则会引发ValueErrorIf a specific value for name is not supported by the host system, even if it is included in pathconf_names, an OSError is raised with errno.EINVAL for the error number.

此功能可以支持specifying a file descriptor

可用的平台:Unix。

os.pathconf_names

pathconf()fpathconf()接受的字典映射名称为由主机操作系统为这些名称定义的整数值。This can be used to determine the set of names known to the system.

可用的平台:Unix。

Return a string representing the path to which the symbolic link points. 结果可以是绝对路径名或相对路径名;如果是相对的,则可以使用os.path.join(os.path.dirname(path), result) t0>。

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

此功能还可以支持相对于目录描述器的paths relative to directory descriptors

可用的平台:Unix、Windows。

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

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

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

Remove (delete) the file path. 如果路径是目录,则会引发OSError使用rmdir()删除目录。

此函数可以支持相对于目录描述器的paths relative to directory descriptors

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

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

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

os.removedirs(name)

Remove directories recursively. 除了如果叶目录被成功删除,removedirs()尝试连续删除path中提到的每个父目录时,rmdir()直到出现错误(其被忽略,因为它通常意味着父目录不为空)。例如,os.removedirs('foo/bar/baz')将首先删除目录'foo/bar/baz',然后删除'foo/bar''foo'如果无法成功删除叶子目录,则引发OSError

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

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

此功能可以支持指定src_dir_fd和/或dst_dir_fd以提供相对于目录描述器的paths relative to directory descriptors

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

版本3.3中的新功能: src_dir_fddst_dir_fd参数。

os.renames(old, new)

Recursive directory or file renaming function. rename()工作,除非创建任何中间目录,使新的路径名良好,首先尝试。重命名后,使用removedirs()删除对应于旧名称的最右路径段的目录。

This function can fail with the new directory structure made if you lack permissions needed to remove the leaf directory or file.

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以提供相对于目录描述器的paths relative to directory descriptors

版本3.3中的新功能。

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

Remove (delete) the directory path. 仅当目录为空时才有效,否则引发OSError为了删除整个目录树,可以使用shutil.rmtree()

此函数可以支持相对于目录描述器的paths relative to directory descriptors

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

os.scandir(path='.')

返回与路径给出的目录中的条目对应的DirEntry对象的迭代器。条目以任意顺序生成,特殊条目'.''..'

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

在Unix上,路径可以是strbytes(使用fsencode()fsdecode()来编码和解码bytes路径)。在Windows上,路径必须是类型str在两个系统上,每个DirEntrynamepath属性的类型与path t9 >。

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

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

在基于Unix的系统上,scandir()使用系统的opendir()readdir()函数。在Windows上,它使用Win32 FindFirstFileWFindNextFileW函数。

版本3.5中的新功能。

class os.DirEntry

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

scandir()将提供尽可能多的此信息,而不进行其他系统调用。当进行stat()lstat()系统调用时,DirEntry对象将缓存结果。

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

因为DirEntry方法可以进行操作系统调用,因此他们也可能引发OSError如果您需要对错误进行非常细粒度的控制,则可以在调用DirEntry方法之一时捕获OSError,并根据情况进行处理。

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

name

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

name属性将与scandir() 相同类型(strbytes path参数。使用fsdecode()来解码字节文件名。

path

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

path属性将与scandir() 相同类型(strbytes path参数。使用fsdecode()来解码字节文件名。

inode()

返回条目的inode编号。

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

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

is_dir(*, follow_symlinks=True)

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

如果follow_symlinksFalse,则只有在此条目是目录(没有以下符号链接)时才返回True如果条目是任何其他类型的文件或者如果它不再存在,则返回False

将结果缓存在DirEntry对象上,并为follow_symlinks TrueFalse分别缓存一个缓存。调用os.stat()stat.S_ISDIR()以获取最新信息。

在第一个非高速缓存的调用中,在大多数情况下不需要系统调用。具体来说,对于非符号链接,除非在返回dirent.d_type == 的某些Unix文件系统上,例如网络文件系统,Windows或Unix都不需要系统调用。 / t2> DT_UNKNOWN如果条目是符号链接,则除非follow_symlinksFalse,否则系统调用将需要遵循符号链接。

此方法可以引发OSError,例如PermissionError,但捕获到FileNotFoundError而不会引发。

is_file(*, follow_symlinks=True)

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

如果follow_symlinksFalse,则只有在此条目是文件(没有以下符号链接)时才返回True如果条目是目录或其他非文件条目,或者如果它不再存在,则返回False

结果缓存在DirEntry对象上。缓存,系统调用和引发的异常按is_dir()

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

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

在第一个非高速缓存的调用中,在大多数情况下不需要系统调用。具体来说,除非在返回dirent.d_type == DT_UNKNOWN

此方法可以引发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()以获取这些属性。

将结果缓存在DirEntry对象上,并为follow_symlinks TrueFalse分别缓存一个缓存。调用os.stat()可获取最新信息。

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

版本3.5中的新功能。

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

获取文件或文件的状态描述器。在给定路径上执行等效于stat()的系统调用。路径可以指定为字符串或打开的文件描述器。返回stat_result对象。

这个函数通常遵循符号链接; to stat a symlink添加参数follow_symlinks=False,或使用lstat()

此函数可以支持specifying a file descriptornot following symlinks

Example:

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

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天的分辨率。See your operating system documentation for details.

类似地,尽管st_atime_nsst_mtime_nsst_ctime_ns始终以纳秒表示,但是许多系统不提供纳秒精度。在提供纳秒精度的系统上,用于存储st_atimest_mtimest_ctime的浮点对象不能保留所有的值,因此将略微不准确。如果您需要准确的时间戳,则应始终使用st_atime_nsst_mtime_nsst_ctime_ns

On some Unix systems (such as Linux), the following attributes may also be available:

st_blocks

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

st_blksize

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

st_rdev

如果是inode设备,则为设备类型。

st_flags

用户定义的文件标志。

On other Unix systems (such as FreeBSD), the following attributes may be available (but may be only filled out if root tries to use them):

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结构中提取信息的函数和常量。(On Windows, some items are filled with dummy values.)

For backward compatibility, a stat_result instance is also accessible as a tuple of at least 10 integers giving the most important (and portable) members of the stat structure, in the order st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, st_size, st_atime, st_mtime, st_ctime. More items may be added at the end by some implementations.为了与旧的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 ints。If newvalue is omitted, return the current setting.

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

默认情况下,Python 现在会返回浮点数值。 采用浮点数时间戳不能正确工作的应用程序,使用该函数能恢复过去行为。

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

建议该设置仅在程序启动时在__ main __模块中更改;库不应更改此设置。If an application uses a library that works incorrectly if floating point time stamps are processed, this application should turn the feature off until the library has been corrected.

自版本3.3起已弃用。

os.statvfs(path)

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

f_flag属性的位标志定义了两个模块级常数:如果设置了ST_RDONLY,则文件系统以只读方式挂载,如果ST_NOSUID

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

此功能可以支持specifying a file descriptor

在版本3.2中已更改:添加了ST_RDONLYST_NOSUID常量。

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

可用的平台:Unix。

版本3.3中的新功能:添加了对指定路径的打开文件描述器的支持。

os.supports_dir_fd

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

要检查特定函数是否允许使用其dir_fd参数,请使用supports_dir_fd中操作符中的in作为示例,此表达式确定os.stat()dir_fd参数是否在本地可用:

os.stat in os.supports_dir_fd

目前dir_fd参数只能在Unix平台上使用;它们都不能在Windows上运行。

版本3.3中的新功能。

os.supports_effective_ids

A Set对象,指示os模块中的哪些函数允许对os.access()使用effective_ids如果本地平台支持它,容器将包含os.access(),否则它将为空。

To check whether you can use the effective_ids parameter for os.access(), use the in operator on supports_effective_ids, like so:

os.access in os.supports_effective_ids

目前effective_ids仅适用于Unix平台;它不工作在Windows上。

版本3.3中的新功能。

os.supports_fd

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

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

os.chdir in os.supports_fd

版本3.3中的新功能。

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

To check whether a particular function permits use of its follow_symlinks parameter, use the in operator on supports_follow_symlinks. 作为示例,此表达式确定os.stat()follow_symlinks参数是否在本地可用:

os.stat in os.supports_follow_symlinks

版本3.3中的新功能。

创建指向名为dstsrc的符号链接。

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

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

此函数可以支持相对于目录描述器的paths relative to directory descriptors

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

当该函数由非特权用户调用时,会引发OSError

可用的平台:Unix、Windows。

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

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

os.sync()

强制写入一切到磁盘。

可用的平台:Unix。

版本3.3中的新功能。

os.truncate(path, length)

截断与路径对应的文件,以使其大小最多为长度字节。

此功能可以支持specifying a file descriptor

可用的平台:Unix、Windows。

版本3.3中的新功能。

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

Remove (delete) the file path. 此函数在语义上与remove()相同; unlink名称是其传统的Unix名称。有关详细信息,请参阅remove()的文档。

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

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

Set the access and modified times of the file specified by path.

utime()采用两个可选参数,ns它们指定在路径上设置的时间,并使用如下:

  • 如果指定ns,则它必须是(atime_ns, mtime_ns)形式的2元组member是一个int表示纳秒。
  • 如果不是None,则必须是形式的2元组(atime, mtime) t5>其中每个成员是表示秒的int或float。
  • 如果Nonens未指定,则等效于指定ns =(atime_ns, mtime_ns)其中两个时间都是当前时间。

ns指定元组是一个错误。

Whether a directory can be given for path depends on whether the operating system implements directories as files (for example, Windows does not). 请注意,您在此设置的确切时间可能不会由后续的stat()调用返回,具体取决于操作系统记录访问和修改时间的分辨率;见stat()The best way to preserve exact times is to use the st_atime_ns and st_mtime_ns fields from the os.stat() result object with the ns parameter to utime.

此函数可以支持specifying a file descriptorpaths relative to directory descriptorsnot following symlinks

版本3.3中的新功能:添加了对指定路径的打开文件描述器和dir_fdfollow_symlinksns参数。

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

通过遍历目录树,自顶向下或自底向上生成目录树下的文件名。对于在根目录 top (包括根目录top 本身), 它都会yield一个3元tuple (dirpath, dirnames, filenames).

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

如果可选参数topdownTrue或未指定,则在生成其任何子目录的三元组tuple之前生成其本身的三元组tuple。(简言之就是自上而下遍历)如果topdownFalse,则在生成所有子目录的三元组之后生成其本身的三元组(即自下而上生成)。No matter the value of topdown, the list of subdirectories is retrieved before the tuples for the directory and its subdirectories are generated.

topdownTrue时,调用者可以修改dirnames列表(可能使用del )和walk()只会递归到名称保留在dirnames中的子目录;这可以用于修剪搜索,强加特定的访问顺序,或甚至通知walk()关于调用者在恢复walk()再次。topdownFalse时修改dir名称对步行的行为没有影响,因为在自下而上模式下,在生成dirpath之前生成。

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

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

请注意,如果链接指向自身的父目录,将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()

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

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

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

This function always supports paths relative to directory descriptors and not following symlinks. 但请注意,与其他函数不同,fwalk() follow_symlinks的默认值为False

由于fwalk()产生文件描述器,所以它们只在下一个迭代步骤有效,因此你应该复制它们。dup())如果你想保持它们更长。

下面的例子显示每个目录下非目录文件占用的字节数,CVS 子目录除外:

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

在下一个示例中,从下到上行走树是必不可少的:rmdir()不允许在目录为空之前删除目录:

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

可用的平台:Unix。

版本3.3中的新功能。

16.1.5.1. Linux扩展属性

版本3.3中的新功能。

这些功能仅在Linux上可用。

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

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

此函数可以支持specifying a file descriptornot following symlinks

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

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

此函数可以支持specifying a file descriptornot following symlinks

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

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

此函数可以支持specifying a file descriptornot following symlinks

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

路径上的扩展文件系统属性属性设置为属性必须是没有嵌入NUL的字节或字符串。如果它是一个str,它使用文件系统编码进行编码。标志可以是XATTR_REPLACEXATTR_CREATE如果给定XATTR_REPLACE且该属性不存在,则会引发EEXISTS如果给定XATTR_CREATE并且该属性已经存在,则不会创建该属性,并且将引发ENODATA

此函数可以支持specifying a file descriptornot following symlinks

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

os.XATTR_SIZE_MAX

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

os.XATTR_CREATE

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

os.XATTR_REPLACE

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

16.1.6. Process Management

These functions may be used to create and manage processes.

各种exec*函数接收加载到进程中的新程序的参数列表。In each case, the first of these arguments is passed to the new program as its own name rather than as an argument a user may have typed on a command line. 对于C程序员,这是传递给程序的main()argv[0]例如,os.execv('/ bin / echo', ['foo', 'bar']) t0>将只在标准输出上打印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)

这些函数都执行一个新程序,替换当前进程;他们不返回。On Unix, the new executable is loaded into the current process, and will have the same process id as the caller. 错误将报告为OSError异常。

The current process is replaced immediately. 打开文件对象和描述器不刷新,所以如果可能有数据缓冲在这些打开的文件,你应该使用sys.stdout.flush()os.fsync(),然后调用exec*函数。

exec*函数的“l”和“v”变量在命令行参数的传递方式上不同。如果参数的数量在编写代码时是固定的,那么“l”变体可能是最容易使用的;单独的参数简单地成为execl*()函数的附加参数。The “v” variants are good when the number of parameters is variable, with the arguments being passed in a list or tuple as the args parameter. In either case, the arguments to the child process should start with the name of the command being run, but this is not enforced.

在末尾附近包含“p”的变体(execlp()execlpe()execvp()execvpe())将使用 PATH环境变量来定位程序文件当环境被替换时(使用下一段中讨论的exec*e变体之一),新环境用作 PATH变量。The other variants, execl(), execle(), execv(), and execve(), will not use the PATH variable to locate the executable; path must contain an appropriate absolute or relative path.

对于execle()execlpe()execve()execvpe()在“e”中),env参数必须是用于为新进程定义环境变量的映射(这些用于代替当前进程的环境);函数execl()execlp()execv()execvp()进程继承当前进程的环境。

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

可用的平台:Unix、Windows。

版本3.3中的新功能:添加了对指定execve()路径的打开文件描述器的支持。

os._exit(n)

Exit the process with status n, without calling cleanup handlers, flushing stdio buffers, etc.

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

定义了以下退出代码,并且可以与_exit()一起使用,尽管它们不是必需的。These are typically used for system programs written in Python, such as a mail server’s external command delivery program.

Some of these may not be available on all Unix platforms, since there is some variation. These constants are defined where they are defined by the underlying platform.

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

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

可用的平台: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()

Fork a child process. 在子项中返回0,在父项中返回子项的进程ID。如果发生错误OSError

注意一些平台包括FreeBSD

Warning

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

可用的平台:Unix。

os.forkpty()

Fork a child process, using a new pseudo-terminal as the child’s controlling terminal. 返回一对(pid, fd),其中pid0子,父进程中的新进程id,以及fd是伪终端的主端的文件描述器。对于更便携的方法,请使用pty模块。如果发生错误OSError

可用的平台:某些Unix系统。

os.kill(pid, sig)

Send signal sig to the process pid. 在主机平台上可用的特定信号的常数在signal模块中定义。

Windows:signal.CTRL_C_EVENTsignal.CTRL_BREAK_EVENT信号是特殊信号,只能发送到共享公共控制台窗口的控制台进程,例如某些子进程。Any other value for sig will cause the process to be unconditionally killed by the TerminateProcess API, and the exit code will be set to sig. Windows版本的kill()还会使进程句柄被终止。

另请参见signal.pthread_kill()

新版本3.2: Windows支持。

os.killpg(pgid, sig)

向进程组pgid 发送sig信号。

可用的平台:Unix。

os.nice(increment)

Add increment to the process’s “niceness”. Return the new niceness.

可用的平台:Unix。

os.plock(op)

Lock program segments into memory. op(在<sys/lock.h>中定义)的值确定锁定哪些段。

可用的平台:Unix。

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

打开到命令cmd的管道。返回值是连接到管道的打开文件对象,根据mode'r'(默认)还是'w'buffers参数与内建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)

Execute the program path in a new process.

(请注意,subprocess模块提供了更强大的功能,用于生成新进程和检索其结果;使用该模块比使用这些功能更可取。特别检查Replacing Older Functions with the subprocess Module更换旧功能。)

如果模式P_NOWAIT,则此函数返回新进程的进程ID;如果模式P_WAIT,则返回进程的退出代码(如果正常退出)或-signal,其中信号杀死了进程的信号。在Windows上,进程id实际上是进程句柄,因此可以与waitpid()函数一起使用。

spawn*函数的“l”和“v”变体在命令行参数的传递方式上不同。如果参数的数量在编写代码时是固定的,那么“l”变体可能是最容易使用的;各个参数只是成为spawnl*()函数的附加参数。The “v” variants are good when the number of parameters is variable, with the arguments being passed in a list or tuple as the args parameter. In either case, the arguments to the child process must start with the name of the command being run.

包括靠近结尾的第二个“p”的变体(spawnlp()spawnlpe()spawnvp()spawnvpe())将使用 PATH环境变量来定位程序文件当环境被替换时(使用下一段中讨论的spawn*e变体之一),新环境用作 PATH变量。The other variants, spawnl(), spawnle(), spawnv(), and spawnve(), will not use the PATH variable to locate the executable; path must contain an appropriate absolute or relative path.

对于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()spawnle()spawnve()在Windows上不是线程安全的;我们建议您改用subprocess模块。

os.P_NOWAIT
os.P_NOWAITO

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

可用的平台:Unix、Windows。

os.P_WAIT

模式参数到spawn*系列函数的可能值。如果给定为mode,则spawn*()函数将不会返回,直到新进程运行到完成,并返回进程的退出代码成功,或-signal(如果信号杀死进程)。

可用的平台:Unix、Windows。

os.P_DETACH
os.P_OVERLAY

模式参数到spawn*系列函数的可能值。These are less portable than those listed above. P_DETACH类似于P_NOWAIT,但新进程与调用进程的控制台分离。如果使用P_OVERLAY,则将替换当前过程; spawn*函数将不会返回。

可用的平台:Windows。

os.startfile(path[, operation])

Start a file with its associated application.

当未指定操作'open'时,此操作类似于在Windows资源管理器中双击文件或将文件名作为参数发送到start 命令:该文件与任何应用程序(如果有)一起打开其扩展名关联。

When another operation is given, it must be a “command verb” that specifies what should be done with the file. Microsoft记录的常见动词为'print''edit'(用于文件)以及'explore''find'(用于目录)。

startfile()在关联的应用程序启动后立即返回。There is no option to wait for the application to close, and no way to retrieve the application’s exit status. The path parameter is relative to the current directory. 如果要使用绝对路径,请确保第一个字符不是斜杠('/');底层的Win32 ShellExecute()函数不工作,如果它是。使用os.path.normpath()函数确保为Win32正确编码路径。

为了减少解释器启动开销,Win32 ShellExecute()函数不会解决,直到这个函数第一次调用。如果函数无法解析,则会引发NotImplementedError

可用的平台:Windows。

os.system(command)

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

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

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

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

可用的平台:Unix、Windows。

os.times()

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

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

为了向后兼容,此对象也像包含usersystemchildren_userchildren_systemelapsed

See the Unix manual page times(2) or the corresponding Windows Platform API documentation. 在Windows上,只有usersystem是已知的;其他属性为零。

可用的平台:Unix、Windows。

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

os.wait()

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

可用的平台:Unix。

os.waitid(idtype, id, options)

等待一个或多个子进程的完成。idtype可以是P_PIDP_PGIDP_ALLid指定要等待的pid。选项是从WEXITEDWSTOPPEDWCONTINUED中的一个或多个的ORing构建的, WNOHANGWNOWAIT返回值是表示包含在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()中的选项中使用的标志,指定要等待的子信号。

可用的平台: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)

The details of this function differ on Unix and Windows.

在Unix上:等待由进程id pid给出的子进程的完成,并返回包含其进程id和退出状态指示的元组(编码为wait()调用的语义受整数选项的值的影响,对于正常操作,该值应为0

如果pid大于0waitpid()请求该特定进程的状态信息。如果pid0,则请求用于当前进程的进程组中任何子进程的状态。如果pid-1,则请求与当前进程的任何子进程相关。如果pid小于-1,则请求进程组-pid中任何进程的状态(pid )。

当syscall返回-1时,会出现OSError的值errno。

On Windows: Wait for completion of a process given by process handle pid, and return a tuple containing pid, and its exit status shifted left by 8 bits (shifting makes cross-platform use of the function easier). 小于或等于0pid在Windows上没有任何特殊含义,并引发异常。The value of integer options has no effect. pid can refer to any process whose id is known, not necessarily a child process. 使用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

This option causes child processes to be reported if they have been continued from a job control stop since their status was last reported.

Availability: Some Unix systems.

os.WUNTRACED

This option causes child processes to be reported if they have been stopped but their current state has not been reported since they were stopped.

可用的平台:Unix。

以下函数采用由system()wait()waitpid()作为参数返回的进程状态代码。They may be used to determine the disposition of a process.

os.WCOREDUMP(status)

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

可用的平台:Unix。

os.WIFCONTINUED(status)

如果过程已从作业控制停止继续,则返回True,否则返回False

可用的平台:Unix。

os.WIFSTOPPED(status)

如果进程已停止,则返回True,否则返回False

可用的平台:Unix。

os.WIFSIGNALED(status)

如果由于信号导致过程退出,则返回True,否则返回False

可用的平台:Unix。

os.WIFEXITED(status)

如果进程使用exit(2)系统调用退出,则返回True,否则返回False

可用的平台:Unix。

os.WEXITSTATUS(status)

如果WIFEXITED(status)为真,则将整数参数返回到exit(2)系统调用。Otherwise, the return value is meaningless.

可用的平台:Unix。

os.WSTOPSIG(status)

Return the signal which caused the process to stop.

可用的平台:Unix。

os.WTERMSIG(status)

Return the signal which caused the process to exit.

可用的平台:Unix。

16.1.7. Interface to the scheduler

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

os.sched_get_priority_max(policy)

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

os.sched_setscheduler(pid, policy, param)

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

os.sched_getscheduler(pid)

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

os.sched_setparam(pid, param)

使用PID pid设置进程的调度参数。pid为0表示调用进程。param是一个sched_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。掩码是表示应该限制进程的CPU集合的整数的迭代。

os.sched_getaffinity(pid)

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

16.1.8. Miscellaneous System Information

os.confstr(name)

Return string-valued system configuration values. name指定要检索的配置值;它可以是作为定义的系统值的名称的字符串;这些名称在许多标准(POSIX,Unix 95,Unix 98和其他)中指定。某些平台还定义了额外的名称。主机操作系统已知的名称作为confstr_names字典的键。对于不包括在该映射中配置变量,传递一个整数给name 也是可以接收的。

如果未定义name指定的配置值,则返回None

如果name是字符串,且不知道,则会引发ValueErrorIf a specific value for name is not supported by the host system, even if it is included in confstr_names, an OSError is raised with errno.EINVAL for the error number.

可用的平台:Unix。

os.confstr_names

confstr()接受的字典映射名称为由主机操作系统为这些名称定义的整数值。This can be used to determine the set of names known to the system.

可用的平台:Unix。

os.cpu_count()

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

版本3.4中的新功能。

os.getloadavg()

如果无法获取负载平均值,则返回在最近1,5和15分钟内平均的系统运行队列中的进程数或引发OSError

可用的平台:Unix。

os.sysconf(name)

Return integer-valued system configuration values. 如果未定义name指定的配置值,则返回-1有关confstr()名称参数的注释也适用于此处;提供已知名称信息的字典由sysconf_names给出。

可用的平台:Unix。

os.sysconf_names

sysconf()接受的字典映射名称为由主机操作系统为这些名称定义的整数值。This can be used to determine the set of names known to the system.

可用的平台:Unix。

The following data values are used to support path manipulation operations. These are defined for all platforms.

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

os.curdir

操作系统把这个常量字符串作为当前地址。这是'.'对于Windows和POSIX。也可通过os.path获得。

os.pardir

The constant string used by the operating system to refer to the parent directory. 这是Windows和POSIX的'..'也可通过os.path获得。

os.sep

The character used by the operating system to separate pathname components. 对于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

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

os.defpath

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

os.linesep

The string used to separate (or, rather, terminate) lines on the current platform. 这可能是单个字符,例如POSIX的'\n'或Windows的多个字符,例如'\r\n'在以文本模式(默认)打开文件时,不要使用os.linesep作为行终止符;请在所有平台上使用单个'\n'

os.devnull

The file path of the null device. 例如:对于POSIX,'/dev/null'用于Windows的'nul'也可通过os.path获得。

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

用于setdlopenflags()getdlopenflags()函数的标志。有关不同标志的含义,请参见Unix手册页dlopen(3)

版本3.3中的新功能。

16.1.9. 其他函数

os.urandom(n)

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

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

在Linux上,如果可用,则使用getrandom() syscall,并且初始化urandom熵池(getrandom()不阻止)。在类Unix系统上,这将查询/dev/urandom在Windows上,它将使用CryptGenRandom()如果未找到随机源,则会引发NotImplementedError

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

在版本3.5.2中更改:在Linux上,如果getrandom()阻止(urandom熵池尚未初始化),请回读/dev/urandom

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