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

源代码: Lib/os.py

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

注意这些功能的可用性︰

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

注意

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

exception os.error

内置 OSError 异常的别名.

os.name

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

也可以看看

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

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

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

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

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

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

16.1.2. 进程参数

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

os.ctermid()

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

可用性:Unix。

os.environ

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

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

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

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

注意

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

注意

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

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

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

os.environb

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

environb仅在supports_bytes_environ为True时可用。

版本3.2中的新功能。

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

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

os.fsencode(filename)

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

fsdecode() is the reverse function.

版本3.2中的新功能。

os.fsdecode(filename)

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

fsencode() is the reverse function.

版本3.2中的新功能。

os.getenv(key, default=None)

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

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

可用性:最受欢迎的Unix,Windows。

os.getenvb(key, default=None)

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

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

版本3.2中的新功能。

os.get_exec_path(env=None)

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

版本3.2中的新功能。

os.getegid()

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

可用性:UNIX。

os.geteuid()

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

可用性:UNIX。

os.getgid()

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

可用性:UNIX。

os.getgrouplist(user, group)

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

可用性:UNIX。

版本3.3中的新功能。

os.getgroups()

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

可用性:UNIX。

注意

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

os.getlogin()

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

可用性:Unix,Windows。

os.getpgid(pid)

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

可用性:UNIX。

os.getpgrp()

返回当前进程组的ID。

可用性:UNIX。

os.getpid()

返回当前进程id。

os.getppid()

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

可用性:Unix,Windows。

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

os.getpriority(which, who)

获取计划调度优先级。其中PRIO_PROCESSPRIO_PGRPPRIO_USERwho之一的值PRIO_PROCESS的进程标识符,PRIO_PGRP的进程组标识符,以及PRIO_USERwho表示(分别)调用进程,调用进程的进程组或调用进程的实际用户标识的零值。

可用性:UNIX。

版本3.3中的新功能。

os.PRIO_PROCESS
os.PRIO_PGRP
os.PRIO_USER

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

可用性:UNIX。

版本3.3中的新功能。

os.getresuid()

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

可用性:UNIX。

版本3.2中的新功能。

os.getresgid()

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

可用性:UNIX。

版本3.2中的新功能。

os.getuid()

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

可用性:UNIX。

os.initgroups(username, gid)

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

可用性:UNIX。

版本3.2中的新功能。

os.putenv(key, value)

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

可用性:最受欢迎的Unix,Windows。

注意

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

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

os.setegid(egid)

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

可用性:UNIX。

os.seteuid(euid)

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

可用性:UNIX。

os.setgid(gid)

设置当前进程的组ID。

可用性:UNIX。

os.setgroups(groups)

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

可用性:UNIX。

注意

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

os.setpgrp()

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

可用性:UNIX。

os.setpgid(pid, pgrp)

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

可用性:UNIX。

os.setpriority(which, who, priority)

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

可用性:Unix

版本3.3中的新功能。

os.setregid(rgid, egid)

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

可用性:UNIX。

os.setresgid(rgid, egid, sgid)

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

可用性:UNIX。

版本3.2中的新功能。

os.setresuid(ruid, euid, suid)

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

可用性:UNIX。

版本3.2中的新功能。

os.setreuid(ruid, euid)

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

可用性:UNIX。

os.getsid(pid)

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

可用性:UNIX。

os.setsid()

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

可用性:UNIX。

os.setuid(uid)

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

可用性:UNIX。

os.strerror(code)

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

os.supports_bytes_environ

TrueFalse在Windows上)。

版本3.2中的新功能。

os.umask(mask)

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

os.uname()

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

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

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

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

可用性:最近的Unix版本。

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

os.unsetenv(key)

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

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

可用性:最受欢迎的Unix,Windows。

16.1.3. 文件对象创建

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

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

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

16.1.4. 文件描述符操作

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

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

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

os.close(fd)

关闭文件描述符fd

注意

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

os.closerange(fd_low, fd_high)

将所有文件描述符从fd_low(包括)关闭到fd_high(不包括),忽略错误。相当于(但快得多):

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

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

os.dup(fd)

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

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

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

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

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

Changed in version 3.4: Add the optional inheritable parameter.

os.fchmod(fd, mode)

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

可用性:UNIX。

os.fchown(fd, uid, gid)

将由fd给出的文件的所有者和组标识更改为数字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是一个字符串且未知,则引发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)

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

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

可用性:Unix,Windows。

os.ftruncate(fd, length)

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

可用性:Unix,Windows。

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

os.get_blocking(fd)

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

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

可用性:UNIX。

版本3.5中的新功能。

os.isatty(fd)

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

os.lockf(fd, cmd, len)

在打开的文件描述符上应用,测试或移除POSIX锁。fd是一个打开的文件描述符。cmd指定要使用的命令 - F_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)

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

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

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

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

注意

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

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

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

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

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

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

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

这些常量仅在Unix上可用。

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

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

这些常量仅在Windows上可用。

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

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

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

os.openpty()

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

可用性:一些Unix的味道。

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

os.pipe()

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

可用性:Unix,Windows。

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

os.pipe2(flags)

使用flags自动设置一个管道。flags可以通过OR这些值中的一个或多个来构造:O_NONBLOCKO_CLOEXEC分别返回可用于读写的一对文件描述符(r, w)

可用性:一些Unix的味道。

版本3.3中的新功能。

os.posix_fallocate(fd, offset, len)

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

可用性:UNIX。

版本3.3中的新功能。

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

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

可用性:UNIX。

版本3.3中的新功能。

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

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

可用性:UNIX。

版本3.3中的新功能。

os.pread(fd, buffersize, offset)

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

可用性:UNIX。

版本3.3中的新功能。

os.pwrite(fd, str, offset)

bytestringoffset写入文件描述符fd,使文件偏移保持不变。

可用性:UNIX。

版本3.3中的新功能。

os.read(fd, n)

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

注意

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

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

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

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

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

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

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

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

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

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

可用性:UNIX。

注意

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

版本3.3中的新功能。

os.set_blocking(fd, blocking)

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

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

可用性:UNIX。

版本3.5中的新功能。

os.SF_NODISKIO
os.SF_MNOWAIT
os.SF_SYNC

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

可用性:UNIX。

版本3.3中的新功能。

os.readv(fd, buffers)

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

可用性:UNIX。

版本3.3中的新功能。

os.tcgetpgrp(fd)

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

可用性:UNIX。

os.tcsetpgrp(fd, pg)

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

可用性:UNIX。

os.ttyname(fd)

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

可用性:UNIX。

os.write(fd, str)

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

注意

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

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

os.writev(fd, buffers)

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

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

可用性:UNIX。

版本3.3中的新功能。

16.1.4.1. 查询终端的大小

版本3.3中的新功能。

os.get_terminal_size(fd=STDOUT_FILENO)

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

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

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

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

可用性:Unix,Windows。

class os.terminal_size

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

columns

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

lines

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

16.1.4.2. 文件描述符的继承

版本3.4中的新功能。

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

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

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

os.get_inheritable(fd)

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

os.set_inheritable(fd, inheritable)

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

os.get_handle_inheritable(handle)

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

可用性:Windows。

os.set_handle_inheritable(handle, inheritable)

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

可用性:Windows。

16.1.5. 文件和目录

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

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

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

    如果该函数还支持dir_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)

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

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

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

注意

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

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

写得更好:

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

注意

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

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

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

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

os.chdir(path)

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

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

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

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

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

该功能可以支持not following symlinks

可用性:UNIX。

版本3.3新增: follow_symlinks参数。

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

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

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

注意

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

版本3.3新增:新增了对指定path作为开放文件描述符,以及dir_fdfollow_symlinks参数的支持。

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

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

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

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

可用性:UNIX。

3.3版新增:新增支持为路径dir_fdfollow_symlinks参数指定打开的文件描述符。

os.chroot(path)

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

可用性:UNIX。

os.fchdir(fd)

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

可用性:UNIX。

os.getcwd()

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

os.getcwdb()

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

os.lchflags(path, flags)

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

可用性:UNIX。

os.lchmod(path, mode)

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

可用性:UNIX。

os.lchown(path, uid, gid)

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

可用性:UNIX。

Create a hard link pointing to src named dst.

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

可用性:Unix,Windows。

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

版本3.3新增:添加了src_dir_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)

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

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

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

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

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

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

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

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

mode参数将传递到mkdir();关于它的解释,请参阅mkdir()的描述

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

注意

如果要创建的路径元素包含pardirmakedirs()将变得混乱(例如,UNIX系统上的“..”)。

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

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

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

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

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

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

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

可用性:UNIX。

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

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

创建一个名为path的文件系统节点(文件,设备专用文件或命名管道)。mode specifies both the permissions to use and the type of node to be created, being combined (bitwise OR) with one of stat.S_IFREG, stat.S_IFCHR, stat.S_IFBLK, and stat.S_IFIFO (those constants are available in stat). 对于stat.S_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)

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

os.pathconf(path, 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.

该函数可以支持specifying a file descriptor

可用性:UNIX。

os.pathconf_names

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

可用性:UNIX。

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

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

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

可用性:Unix,Windows

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

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

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

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

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

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

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

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

os.removedirs(name)

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

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

将文件或目录src重命名为dst如果dst是目录,则会引发OSError在Unix上,如果dst存在并且是一个文件,如果用户有权限,它将以静默方式替换。如果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)

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

注意

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

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)

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

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

版本3.3新增: dir_fd参数。

os.scandir(path='.')

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

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

在Unix上,path可以是strbytes(使用fsencode()fsdecode()来对bytes路径进行编码和解码)。在Windows上,path必须是str类型。在两个系统上,每个DirEntrynamepath属性的类型将与路径 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() will provide as much of this information as possible without making additional system calls. When a stat() or lstat() system call is made, the DirEntry object will cache the result.

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

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

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

name

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

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

path

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

path属性与scandir() 属性的类型相同(strbytes路径参数。使用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的单独缓存。stat.S_ISDIR()一起调用os.stat()以获取最新信息。

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

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

is_file(*, follow_symlinks=True)

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

如果follow_symlinksFalse,则仅当该条目是文件(不符合链接)时返回True。如果条目是目录或其他非文件条目,或者它不再存在,则返回False

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

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

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

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

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

stat(*, follow_symlinks=True)

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

在Unix上,这个方法总是需要一个系统调用。在Windows上,如果follow_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()系统调用。path可以被指定为一个字符串或一个打开的文件描述符。返回一个stat_result对象。

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

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

例:

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

也可以看看

fstat()lstat()函数。

3.3版新增:添加了dir_fdfollow_symlinks参数,指定了文件描述符而不是路径。

class os.stat_result

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

属性:

st_mode

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

st_ino

inode 节点号。

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天的分辨率。详细信息请参阅您的操作系统文档。

Similarly, although st_atime_ns, st_mtime_ns, and st_ctime_ns are always expressed in nanoseconds, many systems do not provide nanosecond precision. 在提供纳秒级精度的系统上,用于存储st_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上,有些项目填充虚拟值。)

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

版本3.3新增:添加了st_atime_nsst_mtime_nsst_ctime_ns个成员。

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

os.stat_float_times([newvalue])

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

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

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

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

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

自版本3.3起已弃用。

os.statvfs(path)

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

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

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

该函数可以支持specifying a file descriptor

在版本3.2中更改:添加了ST_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

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

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

os.stat in os.supports_dir_fd

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

版本3.3中的新功能。

os.supports_effective_ids

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

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

os.access in os.supports_effective_ids

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

版本3.3中的新功能。

os.supports_fd

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

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

os.chdir in os.supports_fd

版本3.3中的新功能。

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

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

os.stat in os.supports_follow_symlinks

版本3.3中的新功能。

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

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

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

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

注意

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

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

可用性:Unix,Windows。

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

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

os.sync()

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

可用性:UNIX。

版本3.3中的新功能。

os.truncate(path, length)

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

该函数可以支持specifying a file descriptor

可用性:Unix,Windows。

版本3.3中的新功能。

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

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

版本3.3新增: dir_fd参数。

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

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

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

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

ns指定元组是错误的。

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

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

3.3版新增:增加了对指定路径dir_fdfollow_symlinks的打开文件描述符的支持,和ns参数。

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

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

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

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

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

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

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

注意

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

注意

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

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

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

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

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

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

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

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

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

该函数始终支持paths relative to directory descriptorsnot following symlinks的路径。但请注意,与其他函数不同,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中的新功能。

16.1.5.1. Linux扩展属性

版本3.3中的新功能。

这些功能仅在Linux上可用。

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

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

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

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

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

此函数可以支持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,它将用文件系统编码进行编码。flags may be XATTR_REPLACE or XATTR_CREATE. If XATTR_REPLACE is given and the attribute does not exist, EEXISTS will be raised. 如果给出XATTR_CREATE并且该属性已经存在,那么该属性将不会被创建,并且会引发ENODATA

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

注意

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

os.XATTR_SIZE_MAX

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

os.XATTR_CREATE

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

os.XATTR_REPLACE

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

16.1.6. 流程管理

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

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

os.abort()

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

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

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

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

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

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

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

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

可用性:Unix,Windows。

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

os._exit(n)

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

注意

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

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

注意

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

os.EX_OK

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

可用性:UNIX。

os.EX_USAGE

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

可用性:UNIX。

os.EX_DATAERR

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

可用性:UNIX。

os.EX_NOINPUT

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

可用性:UNIX。

os.EX_NOUSER

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

可用性:UNIX。

os.EX_NOHOST

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

可用性:UNIX。

os.EX_UNAVAILABLE

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

可用性:UNIX。

os.EX_SOFTWARE

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

可用性:UNIX。

os.EX_OSERR

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

可用性:UNIX。

os.EX_OSFILE

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

可用性:UNIX。

os.EX_CANTCREAT

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

可用性:UNIX。

os.EX_IOERR

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

可用性:UNIX。

os.EX_TEMPFAIL

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

可用性:UNIX。

os.EX_PROTOCOL

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

可用性:UNIX。

os.EX_NOPERM

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

可用性:UNIX。

os.EX_CONFIG

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

可用性:UNIX。

os.EX_NOTFOUND

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

可用性:UNIX。

os.fork()

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

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

警告

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

可用性:UNIX。

os.forkpty()

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

可用性:一些Unix的味道。

os.kill(pid, sig)

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

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

另请参阅signal.pthread_kill()

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

os.killpg(pgid, sig)

Send the signal sig to the process group pgid.

可用性:UNIX。

os.nice(increment)

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

可用性:UNIX。

os.plock(op)

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

可用性:UNIX。

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

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

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

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

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

在新进程中执行程序路径

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

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

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

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

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

例如,以下对spawnlp()spawnvpe()的调用是等效的:

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

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

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

os.P_NOWAIT
os.P_NOWAITO

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

可用性:Unix,Windows。

os.P_WAIT

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

可用性:Unix,Windows。

os.P_DETACH
os.P_OVERLAY

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

可用性:Windows。

os.startfile(path[, operation])

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

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

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

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

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

可用性:Windows。

os.system(command)

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

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

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

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

可用性:Unix,Windows。

os.times()

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

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

为了向后兼容,这个对象的行为就像一个包含usersystemchildren_userchildren_system的五元组,和elapsed

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

可用性:Unix,Windows。

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

os.wait()

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

可用性:UNIX。

os.waitid(idtype, id, options)

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

可用性:UNIX。

版本3.3中的新功能。

os.P_PID
os.P_PGID
os.P_ALL

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

可用性:UNIX。

版本3.3中的新功能。

os.WEXITED
os.WSTOPPED
os.WNOWAIT

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

可用性:UNIX。

版本3.3中的新功能。

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

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

可用性:UNIX。

版本3.3中的新功能。

os.waitpid(pid, options)

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

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

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

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

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

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

os.wait3(options)

类似于waitpid(),除了没有给出进程ID参数并且返回包含子进程ID,退出状态指示和资源使用信息的3元素元组。有关资源使用情况的详细信息,请参阅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,否则返回False

可用性:UNIX。

os.WEXITSTATUS(status)

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

可用性:UNIX。

os.WSTOPSIG(status)

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

可用性:UNIX。

os.WTERMSIG(status)

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

可用性:UNIX。

16.1.7. 调度程序的接口

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

版本3.3中的新功能。

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

os.SCHED_OTHER

默认调度策略。

os.SCHED_BATCH

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

os.SCHED_IDLE

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

os.SCHED_SPORADIC

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

os.SCHED_FIFO

先进先出调度策略。

os.SCHED_RR

循环调度策略。

os.SCHED_RESET_ON_FORK

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

class os.sched_param(sched_priority)

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

目前,只有一个可能的参数:

sched_priority

调度策略的调度优先级。

os.sched_get_priority_min(policy)

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

os.sched_get_priority_max(policy)

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

os.sched_setscheduler(pid, policy, param)

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

os.sched_getscheduler(pid)

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

os.sched_setparam(pid, param)

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

os.sched_getparam(pid)

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

os.sched_rr_get_interval(pid)

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

os.sched_yield()

自愿放弃CPU。

os.sched_setaffinity(pid, mask)

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

os.sched_getaffinity(pid)

返回具有PID pid(或当前过程,如果为零)的过程的CPU集合限制为。

16.1.8. 其他系统信息

os.confstr(name)

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

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

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

可用性:UNIX。

os.confstr_names

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

可用性:UNIX。

os.cpu_count()

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

版本3.4中的新功能。

os.getloadavg()

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

可用性:UNIX。

os.sysconf(name)

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

可用性:UNIX。

os.sysconf_names

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

可用性:UNIX。

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

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

os.curdir

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

os.pardir

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

os.sep

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

os.altsep

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

os.extsep

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

os.pathsep

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

os.defpath

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

os.linesep

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

os.devnull

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

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

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

版本3.3中的新功能。

16.1.9. 其他函数

os.urandom(n)

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

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

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

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

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

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