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
。
-
os.
name
¶ 导入的操作系统相关模块的名字。以下名称目前已注册:
'posix'
,'nt'
,'ce'
,'java'
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 fromos.environ
, and when one of thepop()
orclear()
methods is called.
-
os.
environb
¶ 字节版本的
environ
:a mapping对象表示环境作为字节字符串。environ
andenvironb
are synchronized (modifyenvironb
updatesenviron
, 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
, orPRIO_USER
, and who is interpreted relative to which (a process identifier forPRIO_PROCESS
, process group identifier forPRIO_PGRP
, and a user ID forPRIO_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列表为groups。groups 必须是一个序列,且每个元素必须是一个表示组的整数。该操作通常只有超级用户可用。
可用的平台: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
, orPRIO_USER
, and who is interpreted relative to which (a process identifier forPRIO_PROCESS
, process group identifier forPRIO_PGRP
, and a user ID forPRIO_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
, andmachine
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. 文件对象创建¶
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。
-
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.
dup
(fd)¶ 返回文件描述符fd 的一个副本。新文件描述器是non-inheritable。
在Windows上,当复制标准流(0:stdin,1:stdout,2:stderr)时,新文件描述器是inheritable。
在版本3.4中更改:新文件描述器现在是不可继承的。
-
os.
dup2
(fd, fd2, inheritable=True)¶ 复制文件描述符fd 到fd2,如果必要首先关闭后者。默认情况下,文件描述器fd2为inheritable,如果可继承为
False
,则不可继承。在版本3.4中已更改:添加可选的可继承参数。
-
os.
fchmod
(fd, mode)¶ 改变由fd 给出的文件的模式为数字mode。有关模式的可能值,请参阅
chmod()
的文档。从Python 3.3开始,这相当于os.chmod(fd, mode)
。可用的平台:Unix。
-
os.
fchown
(fd, uid, gid)¶ 改变由fd 给出的文件的所有者以及组ID为数字uid 和gid。如要保留其中的某个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是字符串,且不知道,则会引发
ValueError
。If a specific value for name is not supported by the host system, even if it is included inpathconf_names
, anOSError
is raised witherrno.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.
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_LOCK
,F_TLOCK
,F_ULOCK
或F_TEST
len指定要锁定的文件部分。可用的平台:Unix。
版本3.3中的新功能。
-
os.
lseek
(fd, pos, how)¶ Set the current position of file descriptor fd to position pos, modified by how:
SEEK_SET
or0
to set the position relative to the beginning of the file;SEEK_CUR
or1
to set it relative to the current position;SEEK_END
or2
to set it relative to the end of the file. 返回从开始到当前位置的字节数。
-
os.
SEEK_SET
¶ -
os.
SEEK_CUR
¶ -
os.
SEEK_END
¶ lseek()
函数的参数。它们的值分别是0、1和2。版本3.3中的新功能:某些操作系统可能支持其他值,例如
os.SEEK_HOLE
或os.SEEK_DATA
。
-
os.
open
(path, flags, mode=0o777, *, dir_fd=None)¶ 打开文件path并根据标志设置各种标志,并根据模式设置其模式。当计算模式时,首先掩蔽当前umask值。返回新打开文件的文件描述符。新文件描述器是non-inheritable。
有关标志和模式值的描述,请参见C运行时文档;在
os
模块中定义标志常量(如O_RDONLY
和O_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 withread()
andwrite()
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库定义则不存在。
-
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_NONBLOCK
,O_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
orPOSIX_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.
ttyname
(fd)¶ 返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
可用的平台:Unix。
-
os.
write
(fd, str)¶ 将str中的字节写入文件描述器fd。返回真正写入的字节数。
注
此函数适用于低级I / O,并且必须应用于
os.open()
或pipe()
返回的文件描述器。要写内建函数open()
或popen()
或fdopen()
或sys.stdout
或sys.stderr
,使用其write()
方法。在版本3.5中更改:如果系统调用中断并且信号处理程序未引发异常,则此函数现在重试系统调用,而不是引发
InterruptedError
异常 PEP 475)。
-
os.
writev
(fd, buffers)¶ 将缓冲区的内容写入文件描述器fd。buffers必须是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。
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_fd或follow_symlinks参数,在提供path作为文件描述器时,指定其中一个是错误的。
相对于目录的路径描述器:如果dir_fd不是
None
,它应该是一个指向目录的文件描述器,操作应相对;路径将相对于该目录。如果路径是绝对路径,将忽略dir_fd。(对于POSIX系统,Python将调用...at
或f...at
版本的函数。)您可以使用
os.supports_dir_fd
检查平台是否支持dir_fd。如果它不可用,使用它将引发NotImplementedError
。
不遵循符号链接:如果follow_symlinks为
False
,并且要操作的路径的最后一个元素是符号链接,符号链接本身,而不是链接指向的文件。(对于POSIX系统,Python将调用l...
版本的函数。)您可以使用
os.supports_follow_symlinks
检查您的平台是否支持follow_symlinks。如果它不可用,使用它将引发NotImplementedError
。
-
os.
access
(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)¶ 用真实的 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 ofR_OK
,W_OK
, andX_OK
to test permissions. 如果允许访问,返回True
,如果不允许,返回False
。See the Unix man page access(2) for more information.此函数可以支持指定paths relative to directory descriptors的路径和not following symlinks。
如果effective_ids为
True
,access()
将使用有效的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_fd,effective_ids和follow_symlinks参数。
-
os.
chdir
(path)¶ 将当前的工作目录改为 path.
此功能可以支持specifying a file descriptor。The 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
模块中的定义)的组合(按位或):stat.UF_NODUMP
stat.UF_IMMUTABLE
stat.UF_APPEND
stat.UF_OPAQUE
stat.UF_NOUNLINK
stat.UF_COMPRESSED
stat.UF_HIDDEN
stat.SF_ARCHIVED
stat.SF_IMMUTABLE
stat.SF_APPEND
stat.SF_NOUNLINK
stat.SF_SNAPSHOT
此函数可以支持not following symlinks。
可用的平台:Unix。
版本3.3中的新功能: follow_symlinks参数。
-
os.
chmod
(path, mode, *, dir_fd=None, follow_symlinks=True)¶ 把 path 模式更改成 mode 数值。模式可以采用以下值之一(按
stat
模块中的定义)或它们的位或运算组合:stat.S_ISUID
stat.S_ISGID
stat.S_ENFMT
stat.S_ISVTX
stat.S_IREAD
stat.S_IWRITE
stat.S_IEXEC
stat.S_IRWXU
stat.S_IRUSR
stat.S_IWUSR
stat.S_IXUSR
stat.S_IRWXG
stat.S_IRGRP
stat.S_IWGRP
stat.S_IXGRP
stat.S_IRWXO
stat.S_IROTH
stat.S_IWOTH
stat.S_IXOTH
此函数可以支持specifying a file descriptor,paths relative to directory descriptors和not following symlinks。
注
虽然Windows支持
chmod()
,但只能使用它设置文件的只读标志(通过stat.S_IWRITE
和stat.S_IREAD
常数或相应的整数值)。All other bits are ignored.版本3.3中的新功能:添加了将路径指定为打开文件描述器和dir_fd和follow_symlinks参数。
-
os.
chown
(path, uid, gid, *, dir_fd=None, follow_symlinks=True)¶ 把 path 的所有者、组ID,更改成 uid (用户ID) 、 gid (组ID) 数值。如要保留其中的某个ID不变,设置它为-1。
此函数可以支持specifying a file descriptor,paths relative to directory descriptors和not following symlinks。
有关接受除数字ID之外的名称的更高级别函数,请参见
shutil.chown()
。可用的平台:Unix。
版本3.3中的新功能:添加了对指定路径的打开文件描述器和dir_fd和follow_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。
-
os.
link
(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)¶ 创建指向名为dst的src的硬链接。
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_fd,dst_dir_fd和follow_symlinks参数。
-
os.
listdir
(path='.')¶ 返回一个list,包含给定path 目录下所有条目的名字。该list是任意顺序,不包括特殊条目
'.'
以及'..'
,即使它们存在于目录中。path可以是
str
类型或bytes
类型。如果path的类型为bytes
,则返回的文件名也将为bytes
类型;否则,它们的类型为str
。此函数还可以支持指定一个文件描述器(file descriptor);该文件描述器必须引用一个目录。
注
要将
str
文件名编码为bytes
,请使用fsencode()
。另请参阅
scandir()
函数返回目录条目以及文件属性信息,为许多常见用例提供更好的性能。在版本3.2中更改: 路径参数变为可选。
版本3.3中的新功能:添加了对指定路径的打开文件描述器的支持。
-
os.
lstat
(path, *, dir_fd=None)¶ 在给定路径上执行等效于
lstat()
的系统调用。类似于stat()
,但不遵循符号链接。返回stat_result
对象。在不支持符号链接的平台上,这是
stat()
的别名。从Python 3.3开始,这相当于
os.stat(path, dir_fd = dir_fd, follow_symlinks = False) t0 >。
此功能还可以支持相对于目录描述器的paths relative to directory descriptors
另请参阅
stat()
函数。在版本3.2中已更改:添加了对Windows 6.0(Vista)符号链接的支持。
在版本3.3中已更改:添加了dir_fd参数。
-
os.
mkdir
(path, mode=0o777, *, dir_fd=None)¶ 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_ok为
False
(默认值),则如果目标目录已存在,则会引发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
, andstat.S_IFIFO
(those constants are available instat
). 对于stat.S_IFCHR
和stat.S_IFBLK
,设备定义新创建的设备专用文件(可能使用os.makedev()
此功能还可以支持相对于目录描述器的paths relative to directory descriptors
版本3.3中的新功能: dir_fd参数。
-
os.
major
(device)¶ 从原始设备号(通常是
stat
中的st_dev
或st_rdev
字段)中提取设备主号。
-
os.
minor
(device)¶ 从原始设备号(通常是
stat
中的st_dev
或st_rdev
字段)中提取设备辅助编号。
-
os.
makedev
(major, minor)¶ 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是字符串,且不知道,则会引发
ValueError
。If a specific value for name is not supported by the host system, even if it is included inpathconf_names
, anOSError
is raised witherrno.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。
-
os.
readlink
(path, *, dir_fd=None)¶ 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 存在而且是文件,如果用户有权限它将被默默地替换。如果src 和dst 位于不同的文件系统上,在某些Unix 上可能会失败。如果成功,该重命名将是一个原子操作(这时POSIX 的要求)。在Windows上,如果dst已经存在,则会引发OSError
,即使它是一个文件。此功能可以支持指定src_dir_fd和/或dst_dir_fd以提供相对于目录描述器的paths relative to directory descriptors
如果要跨平台覆盖目标,请使用
replace()
。版本3.3中的新功能: src_dir_fd和dst_dir_fd参数。
-
os.
renames
(old, new)¶ 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存在并且是文件,如果用户具有权限,则将以静默替换。如果src和dst位于不同的文件系统上,则操作可能会失败。如果成功,该重命名将是一个原子操作(这时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上,路径可以是
str
或bytes
(使用fsencode()
和fsdecode()
来编码和解码bytes
路径)。在Windows上,路径必须是类型str
。在两个系统上,每个DirEntry
的name
和path
属性的类型与path t9 >。以下示例显示了使用
scandir()
显示给定路径中不以'.'
开头。entry.is_file()
调用通常不会进行额外的系统调用:for entry in os.scandir(path): if not entry.name.startswith('.') and entry.is_file(): print(entry.name)
注
在基于Unix的系统上,
scandir()
使用系统的opendir()和readdir()函数。在Windows上,它使用Win32 FindFirstFileW和FindNextFileW函数。版本3.5中的新功能。
- class
os.
DirEntry
¶ 由
scandir()
生成的对象,用于公开目录条目的文件路径和其他文件属性。scandir()
将提供尽可能多的此信息,而不进行其他系统调用。当进行stat()
或lstat()
系统调用时,DirEntry
对象将缓存结果。DirEntry
实例不打算存储在长寿命数据结构中;如果您知道文件元数据已更改,或者自调用scandir()
后已经过了很长时间,请调用os.stat(entry.path)
日期信息。因为
DirEntry
方法可以进行操作系统调用,因此他们也可能引发OSError
。如果您需要对错误进行非常细粒度的控制,则可以在调用DirEntry
方法之一时捕获OSError
,并根据情况进行处理。DirEntry
实例的属性和方法如下:-
name
¶ 条目的基本文件名,相对于
scandir()
路径参数。name
属性将与scandir()
相同类型(str
或bytes
path参数。使用fsdecode()
来解码字节文件名。
-
path
¶ 条目的完整路径名:等效于
os.path.join(scandir_path, entry.name)
其中scandir_path是scandir()
path参数。如果scandir()
path参数是绝对路径,则路径是绝对的。path
属性将与scandir()
相同类型(str
或bytes
path参数。使用fsdecode()
来解码字节文件名。
-
inode
()¶ 返回条目的inode编号。
结果缓存在
DirEntry
对象上。使用os.stat(entry.path, follow_symlinks = False).st_ino
可获取最新信息。在第一个未缓存的调用中,需要在Windows上进行系统调用,但在Unix上不需要。
-
is_dir
(*, follow_symlinks=True)¶ 如果此条目是指向目录的目录或符号链接,则返回
True
;如果条目是或指向任何其他类型的文件,或者如果它不再存在,则返回False
。如果follow_symlinks是
False
,则只有在此条目是目录(没有以下符号链接)时才返回True
如果条目是任何其他类型的文件或者如果它不再存在,则返回False
。将结果缓存在
DirEntry
对象上,并为follow_symlinksTrue
和False
分别缓存一个缓存。调用os.stat()
和stat.S_ISDIR()
以获取最新信息。在第一个非高速缓存的调用中,在大多数情况下不需要系统调用。具体来说,对于非符号链接,除非在返回
dirent.d_type == 的某些Unix文件系统上,例如网络文件系统,Windows或Unix都不需要系统调用。 / t2> DT_UNKNOWN
。如果条目是符号链接,则除非follow_symlinks为False
,否则系统调用将需要遵循符号链接。此方法可以引发
OSError
,例如PermissionError
,但捕获到FileNotFoundError
而不会引发。
-
is_file
(*, follow_symlinks=True)¶ 如果此条目是指向文件的文件或符号链接,则返回
True
;如果条目是或指向目录或其他非文件条目,或者如果它不再存在,则返回False
。如果follow_symlinks是
False
,则只有在此条目是文件(没有以下符号链接)时才返回True
如果条目是目录或其他非文件条目,或者如果它不再存在,则返回False
。结果缓存在
DirEntry
对象上。缓存,系统调用和引发的异常按is_dir()
。
-
is_symlink
()¶ 如果此条目是符号链接(即使已损坏),则返回
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_symlinks是
True
,并且该条目是符号链接,则只需要系统调用。在Windows上,
stat_result
的st_ino
,st_dev
和st_nlink
属性始终设置为零。调用os.stat()
以获取这些属性。将结果缓存在
DirEntry
对象上,并为follow_symlinksTrue
和False
分别缓存一个缓存。调用os.stat()
可获取最新信息。
注意,
DirEntry
和pathlib.Path
的几个属性和方法之间有很好的对应关系。In particular, thename
attribute has the same meaning, as do theis_dir()
,is_file()
,is_symlink()
andstat()
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 descriptor和not 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
版本3.3中的新功能:添加了dir_fd和follow_symlinks参数,指定文件描述器而不是路径。
- class
os.
stat_result
¶ 对象的属性大致对应于
stat
结构的成员。它用于os.stat()
,os.fstat()
和os.lstat()
的结果。属性:
-
st_mode
¶ 文件模式:文件类型和文件模式位(权限)。
-
st_ino
¶ 信息节点号。
-
st_dev
¶ 此文件所在的设备的标识符。
-
st_nlink
¶ 硬链接数。
-
st_uid
¶ 文件所有者的用户标识符。
-
st_gid
¶ 文件所有者的组标识符。
-
st_size
¶ 文件大小(以字节为单位),如果它是常规文件或符号链接。符号链接的大小是它包含的路径名的长度,没有终止的空字节。
时间戳:
-
st_atime
¶ 最近访问时间(以秒为单位)。
-
st_mtime
¶ 最近内容修改的时间(以秒为单位)。
-
st_ctime
¶ 平台依赖:
- 在Unix上最新的元数据更改的时间,
- 在Windows上创建的时间,以秒为单位。
-
st_atime_ns
¶ 最近访问时间以纳秒为单位表示为整数。
-
st_mtime_ns
¶ 最近内容修改的时间以纳秒为单位表示为整数。
-
st_ctime_ns
¶ 平台依赖:
- 在Unix上最新的元数据更改的时间,
- 在Windows上创建的时间,以纳秒为单位表示为整数。
另请参见
stat_float_times()
函数。注
st_atime
,st_mtime
和st_ctime
属性的确切含义和解析度取决于操作系统和文件系统。例如,在使用FAT或FAT32文件系统的Windows系统上,st_mtime
具有2秒的分辨率,而st_atime
只有1天的分辨率。See your operating system documentation for details.类似地,尽管
st_atime_ns
,st_mtime_ns
和st_ctime_ns
始终以纳秒表示,但是许多系统不提供纳秒精度。在提供纳秒精度的系统上,用于存储st_atime
,st_mtime
和st_ctime
的浮点对象不能保留所有的值,因此将略微不准确。如果您需要准确的时间戳,则应始终使用st_atime_ns
,st_mtime_ns
和st_ctime_ns
。On some Unix systems (such as Linux), the following attributes may also be available:
-
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 thestat
structure, in the orderst_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_ns
,st_mtime_ns
和st_ctime_ns
成员。版本3.5中的新功能:在Windows上添加了
st_file_attributes
成员。-
-
os.
stat_float_times
([newvalue])¶ 确定
stat_result
是否将时间戳表示为浮点对象。如果newvalue是True
,则未来调用返回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 thestatvfs
structure, namely:f_bsize
,f_frsize
,f_blocks
,f_bfree
,f_bavail
,f_files
,f_ffree
,f_favail
,f_flag
,f_namemax
.为
f_flag
属性的位标志定义了两个模块级常数:如果设置了ST_RDONLY
,则文件系统以只读方式挂载,如果ST_NOSUID
为基于GNU / glibc的系统定义了附加的模块级常量。These are
ST_NODEV
(disallow access to device special files),ST_NOEXEC
(disallow program execution),ST_SYNCHRONOUS
(writes are synced at once),ST_MANDLOCK
(allow mandatory locks on an FS),ST_WRITE
(write on file/directory/symlink),ST_APPEND
(append-only file),ST_IMMUTABLE
(immutable file),ST_NOATIME
(do not update access times),ST_NODIRATIME
(do not update directory access times),ST_RELATIME
(update atime relative to mtime/ctime).此功能可以支持specifying a file descriptor。
在版本3.2中已更改:添加了
ST_RDONLY
和ST_NOSUID
常量。Changed in version 3.4: The
ST_NODEV
,ST_NOEXEC
,ST_SYNCHRONOUS
,ST_MANDLOCK
,ST_WRITE
,ST_APPEND
,ST_IMMUTABLE
,ST_NOATIME
,ST_NODIRATIME
, andST_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 thein
operator onsupports_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中的新功能。
-
os.
supports_follow_symlinks
¶ A
Set
对象,指示os
模块中的哪些函数允许使用其follow_symlinks参数。不同的平台提供不同的功能,并且可能在一个上工作的选项可能在另一个上不被支持。为了保持一致性,支持follow_symlinks的函数总是允许指定参数,但如果函数实际上不可用,将引发异常。To check whether a particular function permits use of its follow_symlinks parameter, use the
in
operator onsupports_follow_symlinks
. 作为示例,此表达式确定os.stat()
的follow_symlinks参数是否在本地可用:os.stat in os.supports_follow_symlinks
版本3.3中的新功能。
-
os.
symlink
(src, dst, target_is_directory=False, *, dir_fd=None)¶ 创建指向名为dst的src的符号链接。
在Windows上,符号链接表示文件或目录,并且不会动态地变形到目标。如果目标存在,将创建符合连接的类型进行匹配。否则,如果target_is_directory为
True
,则符号链接将创建为目录,否则为符号链接(默认)。在非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的支持
-
os.
unlink
(path, *, dir_fd=None)¶ 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。 - 如果次为
None
和ns未指定,则等效于指定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 theos.stat()
result object with the ns parameter to utime.此函数可以支持specifying a file descriptor,paths relative to directory descriptors和not following symlinks。
版本3.3中的新功能:添加了对指定路径的打开文件描述器和dir_fd,follow_symlinks ,ns参数。
- 如果指定ns,则它必须是
-
os.
walk
(top, topdown=True, onerror=None, followlinks=False)¶ 通过遍历目录树,自顶向下或自底向上生成目录树下的文件名。对于在根目录 top (包括根目录top 本身), 它都会yield一个3元tuple
(dirpath, dirnames, filenames)
.dirpath是一个字符串,为目录路径。dirnames是dirpath中子目录的名称列表(不包括
'.'
和'..'
).filenames 为dirpath 下非目录文件的名称列表。注意,列表中的名称不包含路径部分。要获得dirpath 中的文件或目录的完整路径(以 top开头), 请使用os.path.join(dirpath, name)
.如果可选参数topdown为
True
或未指定,则在生成其任何子目录的三元组tuple之前生成其本身的三元组tuple。(简言之就是自上而下遍历)如果topdown是False
,则在生成所有子目录的三元组之后生成其本身的三元组(即自下而上生成)。No matter the value of topdown, the list of subdirectories is retrieved before the tuples for the directory and its subdirectories are generated.当topdown是
True
时,调用者可以修改dirnames列表(可能使用del
)和walk()
只会递归到名称保留在dirnames中的子目录;这可以用于修剪搜索,强加特定的访问顺序,或甚至通知walk()
关于调用者在恢复walk()
再次。在topdown为False
时修改dir名称对步行的行为没有影响,因为在自下而上模式下,在生成dirpath之前生成。默认情况下,来自
listdir()
的错误将被忽略。如果指定了可选参数onerror,它应该是一个函数;it will be called with one argument, anOSError
instance.它可以报告错误以继续遍历还是引发一个异常以停止遍历。请注意,文件名可用作异常对象的filename
属性。默认情况下,
walk()
不会向下走到符号链接解析到目录。将followlinks设置为True
以访问支持它们的系统上symlinks指向的目录。注
请注意,如果链接指向自身的父目录,将followlinks设置为
True
可能会导致无限递归。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
。下面的例子显示每个目录下非目录文件占用的字节数,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,则使用文件系统编码进行编码。
-
os.
listxattr
(path=None, *, follow_symlinks=True)¶ 返回路径上扩展文件系统属性的列表。列表中的属性表示为使用文件系统编码解码的字符串。如果路径为
None
,listxattr()
将检查当前目录。
-
os.
removexattr
(path, attribute, *, follow_symlinks=True)¶ 从路径中删除扩展文件系统属性属性。属性应为字节或str。如果它是一个字符串,它使用文件系统编码进行编码。
-
os.
setxattr
(path, attribute, value, flags=0, *, follow_symlinks=True)¶ 将路径上的扩展文件系统属性属性设置为值。属性必须是没有嵌入NUL的字节或字符串。如果它是一个str,它使用文件系统编码进行编码。标志可以是
XATTR_REPLACE
或XATTR_CREATE
。如果给定XATTR_REPLACE
且该属性不存在,则会引发EEXISTS
。如果给定XATTR_CREATE
并且该属性已经存在,则不会创建该属性,并且将引发ENODATA
。此函数可以支持specifying a file descriptor和not 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>将只在标准输出上打印
bar
; foo
似乎被忽略。
-
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()
, andexecve()
, will not use thePATH
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.
定义了以下退出代码,并且可以与_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)
,其中pid为0
子,父进程中的新进程id,以及fd是伪终端的主端的文件描述器。对于更便携的方法,请使用pty
模块。如果发生错误OSError
。可用的平台:某些Unix系统。
-
os.
kill
(pid, sig)¶ Send signal sig to the process pid. 在主机平台上可用的特定信号的常数在
signal
模块中定义。Windows:
signal.CTRL_C_EVENT
和signal.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()
还会使进程句柄被终止。新版本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()
, andspawnve()
, will not use thePATH
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. 如果要使用绝对路径,请确保第一个字符不是斜杠('/'
);底层的Win32ShellExecute()
函数不工作,如果它是。使用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不指定Csystem()
函数的返回值的含义,因此Python函数的返回值是系统相关的。在Windows上,返回值是在运行命令之后由系统shell返回的值。shell由Windows环境变量
COMSPEC
提供:通常为cmd.exe,返回命令run的退出状态;在使用非本机shell的系统上,请参阅您的shell文档。subprocess
模块为生成新进程和检索其结果提供了更强大的功能;使用该模块比使用此功能更可取。有关一些有用的配方,请参阅subprocess
文档中的Replacing Older Functions with the subprocess Module更换旧功能部分。可用的平台:Unix、Windows。
-
os.
times
()¶ 返回当前全局进程时间。返回值是一个具有五个属性的对象:
user
- 用户时间system
- 系统时间children_user
- 所有子进程的用户时间children_system
- 所有子进程的系统时间elapsed
- 从过去的固定点开始的实际时间
为了向后兼容,此对象也像包含
user
,system
,children_user
,children_system
和elapsed
。See the Unix manual page times(2) or the corresponding Windows Platform API documentation. 在Windows上,只有
user
和system
是已知的;其他属性为零。可用的平台:Unix、Windows。
在版本3.3中更改:返回类型从元组更改为具有命名属性的类元组对象。
-
os.
wait
()¶ 等待子进程的完成,并返回包含其pid和退出状态指示的元组:一个16位数字,其低字节是终止进程的信号编号,并且其高字节是退出状态(如果信号数字为零);如果产生了核心文件,则设置低字节的高位。
可用的平台:Unix。
-
os.
waitid
(idtype, id, options)¶ 等待一个或多个子进程的完成。idtype可以是
P_PID
,P_PGID
或P_ALL
。id指定要等待的pid。选项是从WEXITED
,WSTOPPED
或WCONTINUED
中的一个或多个的ORing构建的,WNOHANG
或WNOWAIT
。返回值是表示包含在siginfo_t
结构中的数据的对象,即:si_pid
,si_uid
,si_signo
,si_status
,si_code
或None
如果指定WNOHANG
,且没有处于可等待状态的子节点。可用的平台: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大于
0
,waitpid()
请求该特定进程的状态信息。如果pid是0
,则请求用于当前进程的进程组中任何子进程的状态。如果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). 小于或等于
0
的pid在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元素元组。有关资源使用信息的详细信息,请参阅resource
。getrusage()
。option参数与提供给waitpid()
和wait4()
的选项参数相同。可用的平台:Unix。
-
os.
wait4
(pid, options)¶ 类似于
waitpid()
,除了返回包含子进程id,退出状态指示和资源使用信息的3元素元组。有关资源使用信息的详细信息,请参阅resource
。getrusage()
。wait4()
的参数与提供给waitpid()
的参数相同。可用的平台: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是字符串,且不知道,则会引发
ValueError
。If a specific value for name is not supported by the host system, even if it is included inconfstr_names
, anOSError
is raised witherrno.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.
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.
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.
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.
linesep
¶ The string used to separate (or, rather, terminate) lines on the current platform. 这可能是单个字符,例如POSIX的
'\n'
或Windows的多个字符,例如'\r\n'
。在以文本模式(默认)打开文件时,不要使用os.linesep作为行终止符;请在所有平台上使用单个'\n'
。
-
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及更高版本中,现在使用Cgetentropy()
函数。这些功能避免使用内部文件描述器。