os --- 多种操作系统接口— Python 3.10.4 說明文件
文章推薦指數: 80 %
在Python 中,使用字符串类型表示文件名、命令行参数和环境变量。
... 直接调用 putenv() 并不会影响 os.environ ,所以推荐直接修改 os.environ 。
瀏覽
索引
模組|
下一頁|
上一頁|
Python»
3.10.4Documentation»
Python標準函式庫(StandardLibrary)»
通用作業系統服務»
os---多种操作系统接口
|
os---多种操作系统接口¶
原始碼:Lib/os.py
本模块提供了一种使用与操作系统相关的功能的便捷式途径。
如果你只是想读写一个文件,请参阅open(),如果你想操作文件路径,请参阅os.path模块,如果你想读取通过命令行给出的所有文件中的所有行,请参阅fileinput模块。
为了创建临时文件和目录,请参阅tempfile模块,对于高级文件和目录处理,请参阅shutil模块。
关于这些函数的适用性的说明:
Python中所有依赖于操作系统的内置模块的设计都是这样,只要不同的操作系统某一相同的功能可用,它就使用相同的接口。
例如,函数os.stat(path)以相同的格式返回关于path的状态信息(该格式源于POSIX接口)。
特定于某一操作系统的扩展通过操作os模块也是可用的,但是使用它们当然是对可移植性的一种威胁。
所有接受路径或文件名的函数都同时支持字节串和字符串对象,并在返回路径或文件名时使用相应类型的对象作为结果。
在VxWorks系统上,os.popen,os.fork,os.execv和os.spawn*p*都未支持。
備註
如果使用无效或无法访问的文件名与路径,或者其他类型正确但操作系统不接受的参数,此模块的所有函数都抛出OSError(或者它的子类)。
exceptionos.error¶
内建的OSError异常的一个别名。
os.name¶
导入的依赖特定操作系统的模块的名称。
以下名称目前已注册:'posix','nt','java'.
也參考
sys.platform有更详细的描述.os.uname()只给出系统提供的版本信息。
platform模块对系统的标识有更详细的检查。
文件名,命令行参数,以及环境变量。
¶
在Python中,使用字符串类型表示文件名、命令行参数和环境变量。
在某些系统上,在将这些字符串传递给操作系统之前,必须将这些字符串解码为字节。
Python使用filesystemencodinganderrorhandler来执行此转换(请参阅sys.getfilesystemencoding())。
filesystemencodinganderrorhandler是在Python启动时通过PyConfig_Read()函数来配置的:请参阅PyConfig的filesystem_encoding和filesystem_errors等成员。
3.1版更變:在某些系统上,使用文件系统编码进行转换可能会失败。
在这种情况下,Python会使用代理转义编码错误处理器,这意味着在解码时,不可解码的字节被Unicode字符U+DCxx替换,并且这些字节在编码时再次转换为原始字节。
文件系统编码器必须保证能成功解码所有128以内的字节。
如果不能保证,API函数可能触发UnicodeError。
另請參閱localeencoding。
PythonUTF-8模式¶
3.7版新加入:更多資訊請見PEP540。
PythonUTF-8模式会忽略localeencoding并强制使用UTF-8编码。
用UTF-8作为文件系统编码。
sys.getfilesystemencoding()回傳'UTF-8'。
locale.getpreferredencoding()返回'UTF-8'(do_setlocale参数不起作用)。
sys.stdin,sys.stdout和sys.stderr都将UTF-8用作它们的文本编码,并且为sys.stdin和sys.stdout启用surrogateescape错误处理句柄(sys.stderr会继续使用backslashreplace如同在默认的局部感知模式下一样)
OnUnix,os.device_encoding()returns'UTF-8'ratherthanthe
deviceencoding.
请注意UTF-8模式下的标准流设置可以被PYTHONIOENCODING所覆盖(在默认的区域感知模式下也同样如此)。
作为低层级API发生改变的结果,其他高层级API也会表现出不同的默认行为:
命令行参数,环境变量和文件名会使用UTF-8编码来解码为文本。
os.fsdecode()和os.fsencode()会使用UTF-8编码。
open(),io.open()和codecs.open()默认会使用UTF-8编码。
但是,它们默认仍将使用严格错误处理句柄,因此试图在文本模式下打开二进制文件将可能引发异常,而不是生成无意义的数据。
如果在Python启动时LC_CTYPE区域设为C或POSIX,则启用PythonUTF-8模式(参见PyConfig_Read()函数)。
它可以通过命令行选项-Xutf8和环境变量PYTHONUTF8,来启用或禁用。
如果没有设置PYTHONUTF8环境变量,那么解释器默认使用当前的地区设置,除非当前地区识别为基于ASCII的传统地区(如PYTHONCOERCECLOCALE所述),并且localecoercion被禁用或失败。
在这种传统地区,除非显式指明不要如此,解释器将默认启用UTF-8模式。
PythonUTF-8模式只能在Python启动时启用。
其值可以从sys.flags.utf8_mode读取。
另请参阅在Windows中的UTF-8模式和filesystemencodinganderrorhandler。
进程参数¶
这些函数和数据项提供了操作当前进程和用户的信息。
os.ctermid()¶
返回与进程控制终端对应的文件名。
適用:Unix。
os.environ¶
Amappingobjectwherekeysandvaluesarestringsthatrepresent
theprocessenvironment.Forexample,environ['HOME']isthepathname
ofyourhomedirectory(onsomeplatforms),andisequivalentto
getenv("HOME")inC.
这个映射是在第一次导入os模块时捕获的,通常作为Python启动时处理site.py的一部分。
除了通过直接修改os.environ之外,在此之后对环境所做的更改不会反映在os.environ中。
该映射除了可以用于查询环境外,还能用于修改环境。
当该映射被修改时,将自动调用putenv()。
在Unix系统上,键和值会使用sys.getfilesystemencoding()和'surrogateescape'的错误处理。
如果你想使用其他的编码,使用environb。
備註
直接调用putenv()并不会影响os.environ,所以推荐直接修改os.environ。
備註
在某些平台上,包括FreeBSD和macOS,设置environ可能导致内存泄漏。
请参阅putenv()的系统文档。
可以删除映射中的元素来删除对应的环境变量。
当从os.environ删除元素时,以及调用pop()或clear()之一时,将自动调用unsetenv()。
3.9版更變:已更新并支持了PEP584的合并(|)和更新(|=)运算符。
os.environb¶
Bytesversionofenviron:amappingobjectwherebothkeys
andvaluesarebytesobjectsrepresentingtheprocessenvironment.
environandenvironbaresynchronized(modifying
environbupdatesenviron,andviceversa).
只有在supports_bytes_environ为True的时候environb才是可用的。
3.2版新加入.
3.9版更變:已更新并支持了PEP584的合并(|)和更新(|=)运算符。
os.chdir(path)
os.fchdir(fd)
os.getcwd()
以上函数请参阅文件和目录。
os.fsencode(filename)¶
将类似路径形式的filename编码为filesystemencodinganderrorhandler;原样返回bytes。
fsdecode()是此函数的逆向函数。
3.2版新加入.
3.6版更變:增加对实现了os.PathLike接口的对象的支持。
os.fsdecode(filename)¶
根据filesystemencodinganderrorhandler来解码类似路径形式的filename;原样返回str。
fsencode()是此函数的逆向函数。
3.2版新加入.
3.6版更變:增加对实现了os.PathLike接口的对象的支持。
os.fspath(path)¶
返回路径的文件系统表示。
如果传入的是str或bytes类型的字符串,将原样返回。
否则__fspath__()将被调用,如果得到的是一个str或bytes类型的对象,那就返回这个值。
其他所有情况则会抛出TypeError 异常。
3.6版新加入.
classos.PathLike¶
某些对象用于表示文件系统中的路径(如pathlib.PurePath对象),本类是这些对象的抽象基类。
3.6版新加入.
abstractmethod__fspath__()¶
返回当前对象的文件系统表示。
这个方法只应该返回一个str字符串或bytes字节串,请优先选择str字符串。
os.getenv(key,default=None)¶
如果存在,返回环境变量key的值,否则返回default。
key,default和返回值均为str字符串类型。
在Unix系统上,键和值会使用sys.getfilesystemencoding() 和``'surrogateescape'``错误处理进行解码。
如果你想使用其他的编码,使用os.getenvb()。
適用:大部分的Unix、Windows。
os.getenvb(key,default=None)¶
如果存在环境变量key那么返回其值,否则返回default。
key,default和返回值均为bytes字节串类型。
getenvb()仅在supports_bytes_environ为True时可用。
適用:大部分的Unix。
3.2版新加入.
os.get_exec_path(env=None)¶
返回将用于搜索可执行文件的目录列表,与在外壳程序中启动一个进程时相似。
指定的env应为用于搜索PATH的环境变量字典。
默认情况下,当env为None时,将会使用environ。
3.2版新加入.
os.getegid()¶
返回当前进程的有效组ID。
对应当前进程执行文件的"setid"位。
適用:Unix。
os.geteuid()¶
返回当前进程的有效用户ID。
適用:Unix。
os.getgid()¶
返回当前进程的实际组ID。
適用:Unix。
os.getgrouplist(user,group)¶
返回该用户所在的组ID列表。
可能group参数没有在返回的列表中,实际上用户应该也是属于该group。
group参数一般可以从储存账户信息的密码记录文件中找到。
適用:Unix。
3.3版新加入.
os.getgroups()¶
返回当前进程关联的附加组ID列表
適用:Unix。
備註
在macOS中,getgroups()会和其他Unix平台有所不同。
如果Python解释器是在10.5或更早版本中部署的,则getgroups()会返回与当前用户进程相关联的有效组ID列表;该列表受限于系统预定义的条目数量,通常为16,并且在适当的权限下还可通过调用setgroups()来修改。
如果是在高于10.5的版本中部署的,则getgroups()会返回与进程的有效用户ID相关联的当前组访问列表;组访问列表可能会在进程的生命周期之内发生改变,它不会受对setgroups()的调用影响,且其长度也不被限制为16。
部署目标值MACOSX_DEPLOYMENT_TARGET可以通过sysconfig.get_config_var()来获取。
os.getlogin()¶
返回通过控制终端进程进行登录的用户名。
在多数情况下,使用getpass.getuser()会更有效,因为后者会通过检查环境变量LOGNAME或USERNAME来查找用户,再由pwd.getpwuid(os.getuid())[0]来获取当前用户ID的登录名。
適用:Unix、Windows。
os.getpgid(pid)¶
根据进程idpid返回进程的组ID列表。
如果pid为0,则返回当前进程的进程组ID列表
適用:Unix。
os.getpgrp()¶
返回当时进程组的ID
適用:Unix。
os.getpid()¶
返回当前进程ID
os.getppid()¶
返回父进程ID。
当父进程已经结束,在Unix中返回的ID是初始进程(1)中的一个,在Windows中仍然是同一个进程ID,该进程ID有可能已经被进行进程所占用。
適用:Unix、Windows。
3.2版更變:新增對Windows的支援。
os.getpriority(which,who)¶
获取程序调度优先级。
which参数值可以是PRIO_PROCESS,PRIO_PGRP,或PRIO_USER中的一个,who是相对于which(PRIO_PROCESS的进程标识符,PRIO_PGRP的进程组标识符和PRIO_USER的用户ID)。
当who为0时(分别)表示调用的进程,调用进程的进程组或调用进程所属的真实用户ID。
適用:Unix。
3.3版新加入.
os.PRIO_PROCESS¶
os.PRIO_PGRP¶
os.PRIO_USER¶
函数getpriority()和setpriority()的参数。
適用:Unix。
3.3版新加入.
os.getresuid()¶
返回一个由(ruid,euid,suid)所组成的元组,分别表示当前进程的真实用户ID,有效用户ID和暂存用户ID。
適用:Unix。
3.2版新加入.
os.getresgid()¶
返回一个由(rgid,egid,sgid)所组成的元组,分别表示当前进程的真实组ID,有效组ID和暂存组ID。
適用:Unix。
3.2版新加入.
os.getuid()¶
返回当前进程的真实用户ID。
適用:Unix。
os.initgroups(username,gid)¶
调用系统initgroups(),使用指定用户所在的所有值来初始化组访问列表,包括指定的组ID。
適用:Unix。
3.2版新加入.
os.putenv(key,value)¶
将名为key的环境变量值设置为value。
该变量名修改会影响由os.system(),popen(),fork()和execv()发起的子进程。
os.environ中的参数赋值会自动转换为对putenv()的调用。
不过putenv()的调用不会更新os.environ,因此最好使用os.environ对变量赋值。
備註
在某些平台上,包括FreeBSD和macOS,设置environ可能导致内存泄漏。
请参阅putenv()的系统文档。
引发一个审计事件os.putenv,附带参数key,value。
3.9版更變:该函数现在总是可用。
os.setegid(egid)¶
设置当前进程的有效组ID。
適用:Unix。
os.seteuid(euid)¶
设置当前进程的有效用户ID。
適用:Unix。
os.setgid(gid)¶
设置当前进程的组ID。
適用:Unix。
os.setgroups(groups)¶
将group参数值设置为与当进程相关联的附加组ID列表。
group参数必须为一个序列,每个元素应为每个组的数字ID。
该操作通常只适用于超级用户。
適用:Unix。
備註
在macOS中,groups的长度不能超过系统定义的最大有效组ID数量,通常为16。
对于未返回与调用setgroups()产生的相同组列表的情况,请参阅getgroups()的文档。
os.setpgrp()¶
根据已实现的版本(如果有)来调用系统setpgrp()或setpgrp(0,0)。
相关说明,请参考Unix手册。
適用:Unix。
os.setpgid(pid,pgrp)¶
使用系统调用setpgid(),将pid对应进程的组ID设置为pgrp。
相关说明,请参考Unix手册。
適用:Unix。
os.setpriority(which,who,priority)¶
设置程序调度优先级。
which的值为PRIO_PROCESS,PRIO_PGRP或PRIO_USER之一,而who会相对于which(PRIO_PROCESS的进程标识符,PRIO_PGRP的进程组标识符和PRIO_USER的用户ID)被解析。
who值为零(分别)表示调用进程,调用进程的进程组或调用进程的真实用户ID。
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)¶
设置当前进程的真实,有效和暂存用户ID。
適用:Unix。
3.2版新加入.
os.setreuid(ruid,euid)¶
设置当前进程的真实和有效用户ID。
適用:Unix。
os.getsid(pid)¶
调用系统调用getsid()。
相关说明,请参考Unix手册。
適用:Unix。
os.setsid()¶
使用系统调用getsid()。
相关说明,请参考Unix手册。
適用:Unix。
os.setuid(uid)¶
设置当前进程的用户ID。
適用:Unix。
os.strerror(code)¶
根据code中的错误码返回错误消息。
在某些平台上当给出未知错误码时strerror()将返回NULL并会引发ValueError。
os.supports_bytes_environ¶
如果操作系统上原生环境类型是字节型则为True(例如在Windows上为False)。
3.2版新加入.
os.umask(mask)¶
设定当前数值掩码并返回之前的掩码。
os.uname()¶
返回当前操作系统的识别信息。
返回值是一个有5个属性的对象:
sysname-作業系統名稱
nodename-机器在网络上的名称(需要先设定)
release-操作系统发行信息
version-作業系統版本
machine-硬件标识符
为了向后兼容,该对象也是可迭代的,像是一个按照sysname,nodename,release,version,和machine顺序组成的元组。
有些系统会将nodename截短为8个字符或截短至前缀部分;获取主机名的一个更好方式是socket.gethostname()或甚至可以用socket.gethostbyaddr(socket.gethostname())。
適用:近期的Unix。
3.3版更變:返回结果的类型由元组变成一个类似元组的对象,同时具有命名的属性。
os.unsetenv(key)¶
取消设置(删除)名为key的环境变量。
变量名的改变会影响由os.system(),popen(),fork()和execv()触发的子进程。
删除在os.environ中的变量会自动转换为对unsetenv()的调用。
但是unsetenv()不能更新os.environ,因此最好直接删除os.environ中的变量。
引发一个审计事件os.unsetenv,附带参数key。
3.9版更變:该函数现在总是可用,并且在Windows上也可用。
创建文件对象¶
这些函数创建新的fileobjects。
(参见open()以获取打开文件描述符的相关信息。
)
os.fdopen(fd,*args,**kwargs)¶
返回打开文件描述符fd对应文件的对象。
类似内建open()函数,二者接受同样的参数。
不同之处在于fdopen()第一个参数应该为整数。
文件描述符操作¶
这些函数对文件描述符所引用的I/O流进行操作。
文件描述符是一些小的整数,对应于当前进程所打开的文件。
例如,标准输入的文件描述符通常是0,标准输出是1,标准错误是2。
之后被进程打开的文件的文件描述符会被依次指定为3,4,5等。
“文件描述符”这个词有点误导性,在Unix平台中套接字和管道也被文件描述符所引用。
当需要时,可以用fileno()可以获得fileobject所对应的文件描述符。
需要注意的是,直接使用文件描述符会绕过文件对象的方法,会忽略如数据内部缓冲等情况。
os.close(fd)¶
关闭文件描述符fd。
備註
该功能适用于低级I/O操作,必须用于os.open()或pipe()返回的文件描述符。
若要关闭由内建函数open()、popen()或fdopen()返回的"文件对象",则应使用其相应的close()方法。
os.closerange(fd_low,fd_high)¶
关闭从fd_low(包括)到fd_high(排除)间的文件描述符,并忽略错误。
类似(但快于):
forfdinrange(fd_low,fd_high):
try:
os.close(fd)
exceptOSError:
pass
os.copy_file_range(src,dst,count,offset_src=None,offset_dst=None)¶
从文件描述符src复制count字节,从偏移量offset_src开始读取,到文件描述符dst,从偏移量offset_dst开始写入。
如果offset_src为None,则src将从当前位置开始读取;offset_dst同理。
src和dst指向的文件必须处于相同的文件系统,否则将会抛出一个errno被设为errno.EXDEV的OSError。
此复制的完成没有额外的从内核到用户空间再回到内核的数据转移花费。
另外,一些文件系统可能实现额外的优化。
完成复制就如同打开两个二进制文件一样。
返回值是复制的字节的数目。
这可能低于需求的数目。
Availability:Linuxkernel>=4.5或glibc>=2.27。
3.8版新加入.
os.device_encoding(fd)¶
如果连接到终端,则返回一个与fd关联的设备描述字符,否则返回None。
在Unix上,如果启用了PythonUTF-8模式,则返回'UTF-8'而不是设备的编码格式。
3.10版更變:在Unix上,该函数现在实现了PythonUTF-8模式。
os.dup(fd)¶
返回一个文件描述符fd的副本。
该文件描述符的副本是不可继承的。
在Windows中,当复制一个标准流(0:stdin,1:stdout,2:stderr)时,新的文件描述符是可继承的。
3.4版更變:新的文件描述符现在是不可继承的。
os.dup2(fd,fd2,inheritable=True)¶
把文件描述符fd复制为fd2,必要时先关闭后者。
返回fd2。
新的文件描述符默认是可继承的,除非在inheritable为False时,是不可继承的。
3.4版更變:添加可选参数inheritable。
3.7版更變:成功时返回fd2,以过去的版本中,总是返回None。
os.fchmod(fd,mode)¶
将fd指定文件的权限状态修改为mode。
可以参考chmod()中列出mode的可用值。
从Python3.3开始,这相当于os.chmod(fd,mode)。
引发一个审计事件os.chmod,附带参数path、mode、dir_fd。
適用:Unix。
os.fchown(fd,uid,gid)¶
分别将fd指定文件的所有者和组ID修改为uid和gid的值。
若不想变更其中的某个ID,可将相应值设为-1。
参考chown()。
从Python3.3开始,这相当于os.chown(fd,uid,gid)。
引发一个审计事件os.chown,附带参数path、uid、gid、dir_fd。
適用:Unix。
os.fdatasync(fd)¶
强制将文件描述符fd指定文件写入磁盘。
不强制更新元数据。
適用:Unix。
備註
该功能在MacOS中不可用。
os.fpathconf(fd,name)¶
返回与打开的文件有关的系统配置信息。
name指定要查找的配置名称,它可以是字符串,是一个系统已定义的名称,这些名称定义在不同标准(POSIX.1,Unix95,Unix98等)中。
一些平台还定义了额外的其他名称。
当前操作系统已定义的名称在pathconf_names字典中给出。
对于未包含在该映射中的配置名称,也可以传递一个整数作为name。
如果name是一个字符串且不是已定义的名称,将抛出ValueError异常。
如果当前系统不支持name指定的配置名称,即使该名称存在于pathconf_names,也会抛出OSError异常,错误码为errno.EINVAL。
从Python3.3起,此功能等价于os.pathconf(fd,name)。
適用:Unix。
os.fstat(fd)¶
获取文件描述符fd的状态.返回一个stat_result对象。
从Python3.3起,此功能等价于os.stat(fd)。
也參考
stat()函数。
os.fstatvfs(fd)¶
返回文件系统的信息,该文件系统是文件描述符fd指向的文件所在的文件系统,与statvfs()一样。
从Python3.3开始,它等效于os.statvfs(fd)。
適用:Unix。
os.fsync(fd)¶
强制将文件描述符fd指向的文件写入磁盘。
在Unix,这将调用原生fsync()函数;在Windows,则是MS_commit()函数。
如果要写入的是缓冲区内的Python文件对象f,请先执行f.flush(),然后执行os.fsync(f.fileno()),以确保与f关联的所有内部缓冲区都写入磁盘。
適用:Unix、Windows。
os.ftruncate(fd,length)¶
截断文件描述符fd指向的文件,以使其最大为length字节。
从Python3.3开始,它等效于os.truncate(fd,length)。
引发一个审计事件os.truncate,附带参数fd,length。
適用:Unix、Windows。
3.5版更變:新增對Windows的支援
os.get_blocking(fd)¶
获取文件描述符的阻塞模式:如果设置了O_NONBLOCK标志位,返回False,如果该标志位被清除,返回True。
另請參閱set_blocking()與socket.socket.setblocking()。
適用:Unix。
3.5版新加入.
os.isatty(fd)¶
如果文件描述符fd打开且已连接至tty设备(或类tty设备),返回True,否则返回False。
os.lockf(fd,cmd,len)¶
在打开的文件描述符上,使用、测试或删除POSIX锁。
fd是一个打开的文件描述符。
cmd指定要进行的操作,它们是F_LOCK、F_TLOCK、F_ULOCK或F_TEST中的一个。
len指定哪部分文件需要锁定。
引发一个审计事件os.lockf,附带参数fd、cmd、len。
適用:Unix。
3.3版新加入.
os.F_LOCK¶
os.F_TLOCK¶
os.F_ULOCK¶
os.F_TEST¶
标志位,用于指定lockf()进行哪一种操作。
適用:Unix。
3.3版新加入.
os.lseek(fd,pos,how)¶
将文件描述符fd的当前位置设置为pos,位置的计算方式how如下:设置为SEEK_SET或0表示从文件开头计算,设置为SEEK_CUR或1表示从文件当前位置计算,设置为SEEK_END或2表示文件末尾计算。
返回新指针位置,这个位置是从文件开头计算的,单位是字节。
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=511,*,dir_fd=None)¶
打开文件path,根据flags设置各种标志位,并根据mode设置其权限状态。
当计算mode时,会首先根据当前umask值将部分权限去除。
本方法返回新文件的描述符。
新的文件描述符是不可继承的。
有关flag和mode取值的说明,请参见C运行时文档。
标志位常量(如O_RDONLY和O_WRONLY)在os模块中定义。
特别地,在Windows上需要添加O_BINARY才能以二进制模式打开文件。
本函数带有dir_fd参数,支持基于目录描述符的相对路径。
open附带参数path、mode、flags会引发审计事件。
3.4版更變:新的文件描述符现在是不可继承的。
備註
本函数适用于底层的I/O。
常规用途请使用内置函数open(),该函数的read()和write()方法(及其他方法)会返回文件对象。
要将文件描述符包装在文件对象中,请使用fdopen()。
3.3版新加入:dir_fd引數。
3.5版更變:如果系统调用被中断,但信号处理程序没有触发异常,此函数现在会重试系统调用,而不是触发InterruptedError异常(原因详见PEP475)。
3.6版更變:接受一个path-likeobject。
以下常量是open()函数flags参数的选项。
可以用按位或运算符|将它们组合使用。
部分常量并非在所有平台上都可用。
有关其可用性和用法的说明,请参阅open(2)手册(Unix上)或MSDN(Windows上)。
os.O_RDONLY¶
os.O_WRONLY¶
os.O_RDWR¶
os.O_APPEND¶
os.O_CREAT¶
os.O_EXCL¶
os.O_TRUNC¶
上述常量在Unix和Windows上均可用。
os.O_DSYNC¶
os.O_RSYNC¶
os.O_SYNC¶
os.O_NDELAY¶
os.O_NONBLOCK¶
os.O_NOCTTY¶
os.O_CLOEXEC¶
这个常数仅在Unix系统中可用。
3.3版更變:增加O_CLOEXEC常量。
os.O_BINARY¶
os.O_NOINHERIT¶
os.O_SHORT_LIVED¶
os.O_TEMPORARY¶
os.O_RANDOM¶
os.O_SEQUENTIAL¶
os.O_TEXT¶
这个常数仅在Windows系统中可用。
os.O_EVTONLY¶
os.O_FSYNC¶
os.O_SYMLINK¶
os.O_NOFOLLOW_ANY¶
以上常量仅适用于macOS。
3.10版更變:加入O_EVTONLY、O_FSYNC、O_SYMLINK和O_NOFOLLOW_ANY常量。
os.O_ASYNC¶
os.O_DIRECT¶
os.O_DIRECTORY¶
os.O_NOFOLLOW¶
os.O_NOATIME¶
os.O_PATH¶
os.O_TMPFILE¶
os.O_SHLOCK¶
os.O_EXLOCK¶
上述常量是扩展常量,如果C库未定义它们,则不存在。
3.4版更變:在支持的系统上增加O_PATH。
增加O_TMPFILE,仅在LinuxKernel3.11或更高版本可用。
os.openpty()¶
打开一对新的伪终端,返回一对文件描述符(主,从),分别为pty和tty。
新的文件描述符是不可继承的。
对于(稍微)轻量一些的方法,请使用pty模块。
適用:部分的Unix。
3.4版更變:新的文件描述符不再可继承。
os.pipe()¶
创建一个管道,返回一对分别用于读取和写入的文件描述符(r,w)。
新的文件描述符是不可继承的。
適用:Unix、Windows。
3.4版更變:新的文件描述符不再可继承。
os.pipe2(flags)¶
创建带有flags标志位的管道。
可通过对以下一个或多个值进行“或”运算来构造这些flags:O_NONBLOCK、O_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)¶
声明即将以特定模式访问数据,使内核可以提前进行优化。
数据范围是从fd所指向文件的offset开始,持续len个字节。
advice的取值是如下之一:POSIX_FADV_NORMAL,POSIX_FADV_SEQUENTIAL,POSIX_FADV_RANDOM,POSIX_FADV_NOREUSE,POSIX_FADV_WILLNEED或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,n,offset)¶
从文件描述符fd所指向文件的偏移位置offset开始,读取至多n个字节,而保持文件偏移量不变。
返回所读取字节的字节串(bytestring)。
如果到达了fd指向的文件末尾,则返回空字节对象。
適用:Unix。
3.3版新加入.
os.preadv(fd,buffers,offset,flags=0)¶
从文件描述符fd所指向文件的偏移位置offset开始,将数据读取至可变字节类对象缓冲区buffers中,保持文件偏移量不变。
将数据依次存放到每个缓冲区中,填满一个后继续存放到序列中的下一个缓冲区,来保存其余数据。
flags参数可以由零个或多个标志位进行按位或运算来得到:
RWF_HIPRI
RWF_NOWAIT
返回实际读取的字节总数,该总数可以小于所有对象的总容量。
操作系统可能对允许使用的缓冲区数量有限制(使用sysconf()获取'SC_IOV_MAX'值)。
本方法结合了os.readv()和os.pread()的功能。
可用性:Linux2.6.30或更高版本,FreeBSD6.0或更高版本,OpenBSD2.7或更高版本,AIX7.1或更高版本。
使用标志位需要Linux4.6或更高版本。
3.7版新加入.
os.RWF_NOWAIT¶
不要等待无法立即获得的数据。
如果指定了此标志,那么当需要从后备存储器中读取数据,或等待文件锁时,系统调用将立即返回。
如果成功读取数据,则返回读取的字节数。
如果未读取到数据,则返回-1,并将错误码errno置为errno.EAGAIN。
適用:Linux4.14以上。
3.7版新加入.
os.RWF_HIPRI¶
高优先级读/写。
允许基于块的文件系统对设备进行轮询,这样可以降低延迟,但可能会占用更多资源。
目前在Linux上,此功能仅在使用O_DIRECT标志打开的文件描述符上可用。
適用:Linux4.6以上。
3.7版新加入.
os.pwrite(fd,str,offset)¶
将str中的字节串(bytestring)写入文件描述符fd的偏移位置offset处,保持文件偏移量不变。
返回实际写入的字节数。
適用:Unix。
3.3版新加入.
os.pwritev(fd,buffers,offset,flags=0)¶
将缓冲区buffers的内容写入文件描述符fd的偏移位置offset处,保持文件偏移量不变。
缓冲区buffers必须是由字节类对象组成的序列。
缓冲区以数组顺序处理。
先写入第一个缓冲区的全部内容,再写入第二个缓冲区,照此继续。
flags参数可以由零个或多个标志位进行按位或运算来得到:
RWF_DSYNC
RWF_SYNC
RWF_APPEND
返回实际写入的字节总数。
操作系统可能对允许使用的缓冲区数量有限制(使用sysconf()获取'SC_IOV_MAX'值)。
本方法结合了os.writev()和os.pwrite()的功能。
可用性:Linux2.6.30或更高版本,FreeBSD6.0或更高版本,OpenBSD2.7或更高版本,AIX7.1或更高版本。
使用标志位需要Linux4.7或更高版本。
3.7版新加入.
os.RWF_DSYNC¶
提供预写功能,等效于带O_DSYNC标志的os.open()。
本标志只作用于通过系统调用写入的数据。
適用:Linux4.7以上。
3.7版新加入.
os.RWF_SYNC¶
提供预写功能,等效于带O_SYNC标志的os.open()。
本标志只作用于通过系统调用写入的数据。
適用:Linux4.7以上。
3.7版新加入.
os.RWF_APPEND¶
提供预写功能,等效于带O_APPEND标志的os.open()。
本标志只对os.pwritev()有意义,只作用于通过系统调用写入的数据。
参数offset对写入操作无效;数据总是会添加到文件的末尾。
但如果offset参数为-1,则会刷新当前文件的offset。
適用:Linux4.16以上。
3.10版新加入.
os.read(fd,n)¶
从文件描述符fd中读取至多n个字节。
返回所读取字节的字节串(bytestring)。
如果到达了fd指向的文件末尾,则返回空字节对象。
備註
该功能适用于低级I/O操作,必须用于os.open()或pipe()返回的文件描述符。
若要读取由内建函数open()、popen()、fdopen()或sys.stdin返回的"文件对象",则应使用其相应的read()或readline()方法。
3.5版更變:如果系统调用被中断,但信号处理程序没有触发异常,此函数现在会重试系统调用,而不是触发InterruptedError异常(原因详见PEP475)。
os.sendfile(out_fd,in_fd,offset,count)¶
os.sendfile(out_fd,in_fd,offset,count,headers=(),trailers=(),flags=0)
将文件描述符in_fd中的count字节复制到文件描述符out_fd的偏移位置offset处。
返回复制的字节数,如果到达EOF,返回0。
定义了sendfile()的所有平台均支持第一种函数用法。
在Linux上,将offset设置为None,则从in_fd的当前位置开始读取,并更新in_fd的位置。
第二种情况可以被用于macOS和FreeBSD,其中headers和trailers是任意的缓冲区序列,它们会在写入来自in_fd的数据之前被写入。
它的返回内容与第一种情况相同。
在macOS和FreeBSD上,传入0值作为count将指定持续发送直至到达in_fd的末尾。
所有平台都支持将套接字作为out_fd文件描述符,有些平台也支持其他类型(如常规文件或管道)。
跨平台应用程序不应使用headers、trailers和flags参数。
適用:Unix。
備註
有关sendfile()的高级封装,参见socket.socket.sendfile()。
3.3版新加入.
3.9版更變:out和in参数被重命名为out_fd和in_fd。
os.set_blocking(fd,blocking)¶
设置指定文件描述符的阻塞模式:如果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.splice(src,dst,count,offset_src=None,offset_dst=None)¶
由文件描述符src传输count字节,从偏移量offset_src开始读取,到文件描述符dst,从偏移量offset_dst开始写入。
至少得有一个文件描述符必须指向管道。
如果offset_src为None,则src将从当前位置开始读取;offset_dst同理。
指向管道的文件描述符,其偏移量必须为None。
src和dst指向的文件必须处于同一文件系统中,否则将会触发OSError,其errno将被设为errno.EXDEV。
此复制的完成没有额外的从内核到用户空间再回到内核的数据转移花费。
另外,一些文件系统可能实现额外的优化。
完成复制就如同打开两个二进制文件一样。
调用成功后,返回拼接到管道的字节数或从管道拼接出来的字节数。
返回值为0意味着输入结束。
如果src指向一个管道,则意味着没有数据需要传输,而且由于没有写入程序连到管道的写入端,所以将不会阻塞。
可用性:Linux>=2.6.27且glibc>=2.5。
3.10版新加入.
os.SPLICE_F_MOVE¶
os.SPLICE_F_NONBLOCK¶
os.SPLICE_F_MORE¶
3.10版新加入.
os.readv(fd,buffers)¶
从文件描述符fd将数据读取至多个可变的字节类对象缓冲区buffers中。
将数据依次存放到每个缓冲区中,填满一个后继续存放到序列中的下一个缓冲区,来保存其余数据。
返回实际读取的字节总数,该总数可以小于所有对象的总容量。
操作系统可能对允许使用的缓冲区数量有限制(使用sysconf()获取'SC_IOV_MAX'值)。
適用:Unix。
3.3版新加入.
os.tcgetpgrp(fd)¶
返回与fd指定的终端相关联的进程组(fd是由os.open()返回的已打开的文件描述符)。
適用:Unix。
os.tcsetpgrp(fd,pg)¶
设置与fd指定的终端相关联的进程组为pg*(*fd是由os.open()返回的已打开的文件描述符)。
適用:Unix。
os.ttyname(fd)¶
返回一个字符串,该字符串表示与文件描述符fd关联的终端。
如果fd没有与终端关联,则抛出异常。
適用:Unix。
os.write(fd,str)¶
将str中的字节串(bytestring)写入文件描述符fd。
返回实际写入的字节数。
備註
该功能适用于低级I/O操作,必须用于os.open()或pipe()返回的文件描述符。
若要写入由内建函数open()、popen()、fdopen()、sys.stdout或sys.stderr返回的"文件对象",则应使用其相应的write()方法。
3.5版更變:如果系统调用被中断,但信号处理程序没有触发异常,此函数现在会重试系统调用,而不是触发InterruptedError异常(原因详见PEP475)。
os.writev(fd,buffers)¶
将缓冲区buffers的内容写入文件描述符fd。
缓冲区buffers必须是由字节类对象组成的序列。
缓冲区以数组顺序处理。
先写入第一个缓冲区的全部内容,再写入第二个缓冲区,照此继续。
返回实际写入的字节总数。
操作系统可能对允许使用的缓冲区数量有限制(使用sysconf()获取'SC_IOV_MAX'值)。
適用:Unix。
3.3版新加入.
查询终端的尺寸¶
3.3版新加入.
os.get_terminal_size(fd=STDOUT_FILENO)¶
返回终端窗口的尺寸,格式为(columns,lines),它是类型为terminal_size的元组。
可选参数fd(默认为STDOUT_FILENO或标准输出)指定应查询的文件描述符。
如果文件描述符未连接到终端,则抛出OSError异常。
shutil.get_terminal_size()是供常规使用的高阶函数,os.get_terminal_size是其底层的实现。
適用:Unix、Windows。
classos.terminal_size¶
元组的子类,存储终端窗口尺寸(columns,lines)。
columns¶
终端窗口的宽度,单位为字符。
lines¶
终端窗口的高度,单位为字符。
文件描述符的继承¶
3.4版新加入.
每个文件描述符都有一个"inheritable"(可继承)标志位,该标志位控制了文件描述符是否可以由子进程继承。
从Python3.4开始,由Python创建的文件描述符默认是不可继承的。
在UNIX上,执行新程序时,不可继承的文件描述符在子进程中是关闭的,其他文件描述符将被继承。
在Windows上,不可继承的句柄和文件描述符在子进程中是关闭的,但标准流(文件描述符0、1和2即标准输入、标准输出和标准错误)是始终继承的。
如果使用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。
文件和目录¶
在某些Unix平台上,许多函数支持以下一项或多项功能:
指定文件描述符为参数:通常在os模块中提供给函数的path参数必须是表示文件路径的字符串,但是,某些函数现在可以接受其path参数为打开文件描述符,该函数将对描述符指向的文件进行操作。
(对于POSIX系统,Python将调用以f开头的函数变体(如调用fchdir而不是chdir)。
)
可以用os.supports_fd检查某个函数在你的平台上是否支持将path参数指定为文件描述符。
如果不支持,使用该功能将抛出NotImplementedError异常。
如果该函数还支持dir_fd或follow_symlinks参数,那么用文件描述符作为path后就不能再指定上述参数了。
基于目录描述符的相对路径:如果dir_fd不是None,它就应该是一个指向目录的文件描述符,这时待操作的path应该是相对路径,相对路径是相对于前述目录的。
如果path是绝对路径,则dir_fd将被忽略。
(对于POSIX系统,Python将调用该函数的变体,变体以at结尾,可能以f开头(如调用faccessat而不是access)。
可以用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)¶
使用实际用户ID/用户组ID测试对path的访问。
请注意,大多数测试操作将使用有效用户ID/用户组ID,因此可以在suid/sgid环境中运用此例程,来测试调用用户是否具有对path的指定访问权限。
mode为F_OK时用于测试path是否存在,也可以对R_OK、W_OK和X_OK中的一个或多个进行“或”运算来测试指定权限。
允许访问则返回True,否则返回False。
更多信息请参见Unix手册页access(2)。
本函数支持指定基于目录描述符的相对路径和不跟踪符号链接。
如果effective_ids为True,access()将使用有效用户ID/用户组ID而非实际用户ID/用户组ID进行访问检查。
您的平台可能不支持effective_ids,您可以使用os.supports_effective_ids检查它是否可用。
如果不可用,使用它时会抛出NotImplementedError异常。
備註
使用access()来检查用户是否具有某项权限(如打开文件的权限),然后再使用open()打开文件,这样做存在一个安全漏洞,因为用户可能会在检查和打开文件之间的时间里做其他操作。
推荐使用EAFP技术。
如:
ifos.access("myfile",os.R_OK):
withopen("myfile")asfp:
returnfp.read()
return"somedefaultdata"
最好写成:
try:
fp=open("myfile")
exceptPermissionError:
return"somedefaultdata"
else:
withfp:
returnfp.read()
備註
即使access()指示I/O操作会成功,但实际操作仍可能失败,尤其是对网络文件系统的操作,其权限语义可能超出常规的POSIX权限位模型。
3.3版更變:新增dir_fd、effective_ids與follow_symlinks參數。
3.6版更變:接受一个path-likeobject。
os.F_OK¶
os.R_OK¶
os.W_OK¶
os.X_OK¶
作为access()的mode参数的可选值,分别测试path的存在性、可读性、可写性和可执行性。
os.chdir(path)¶
将当前工作目录更改为path。
本函数支持指定文件描述符为参数。
其中,描述符必须指向打开的目录,不能是打开的文件。
本函数可以抛出OSError及其子类的异常,如FileNotFoundError、PermissionError和NotADirectoryError异常。
引发一个审计事件os.chdir,附带参数path。
3.3版新加入:在某些平台上新增支持将path参数指定为文件描述符。
3.6版更變:接受一个path-likeobject。
os.chflags(path,flags,*,follow_symlinks=True)¶
将path的flags设置为其他由数字表示的flags。
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
本函数支持不跟踪符号链接。
引发一个审计事件os.chflags,附带参数path、flags。
適用:Unix。
3.3版新加入:follow_symlinks引數。
3.6版更變:接受一个path-likeobject。
os.chmod(path,mode,*,dir_fd=None,follow_symlinks=True)¶
将path的mode更改为其他由数字表示的mode。
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
本函数支持指定文件描述符、指定基于目录描述符的相对路径和不跟踪符号链接。
備註
尽管Windows支持chmod(),但只能用它设置文件的只读标志(stat.S_IWRITE和stat.S_IREAD常量或对应的整数值)。
所有其他标志位都会被忽略。
引发一个审计事件os.chmod,附带参数path、mode、dir_fd。
3.3版新加入:添加了指定path为文件描述符的支持,以及dir_fd和follow_symlinks参数。
3.6版更變:接受一个path-likeobject。
os.chown(path,uid,gid,*,dir_fd=None,follow_symlinks=True)¶
将path的用户和组ID分别修改为数字形式的uid和gid。
若要使其中某个ID保持不变,请将其置为-1。
本函数支持指定文件描述符、指定基于目录描述符的相对路径和不跟踪符号链接。
参见更高阶的函数shutil.chown(),除了数字ID之外,它也接受名称。
引发一个审计事件os.chown,附带参数path、uid、gid、dir_fd。
適用:Unix。
3.3版新加入:添加了指定path为文件描述符的支持,以及dir_fd和follow_symlinks参数。
3.6版更變:支持类路径对象。
os.chroot(path)¶
将当前进程的根目录更改为path。
適用:Unix。
3.6版更變:接受一个path-likeobject。
os.fchdir(fd)¶
将当前工作目录更改为文件描述符fd指向的目录。
fd必须指向打开的目录而非文件。
从Python3.3开始,它等效于os.chdir(fd)。
引发一个审计事件os.chdir,附带参数path。
適用:Unix。
os.getcwd()¶
返回表示当前工作目录的字符串。
os.getcwdb()¶
返回表示当前工作目录的字节串(bytestring)。
3.8版更變:在Windows上,本函数现在会使用UTF-8编码格式而不是ANSI代码页:请参看PEP529了解具体原因。
该函数在Windows上不再被弃用。
os.lchflags(path,flags)¶
将path的flags设置为其他由数字表示的flags,与chflags()类似,但不跟踪符号链接。
从Python3.3开始,它等效于os.chflags(path,flags,follow_symlinks=False)。
引发一个审计事件os.chflags,附带参数path、flags。
適用:Unix。
3.6版更變:接受一个path-likeobject。
os.lchmod(path,mode)¶
将path的权限状态修改为mode。
如果path是符号链接,则影响符号链接本身而非链接目标。
可以参考chmod()中列出mode的可用值。
从Python3.3开始,它等效于os.chmod(path,mode,follow_symlinks=False)。
引发一个审计事件os.chmod,附带参数path、mode、dir_fd。
適用:Unix。
3.6版更變:接受一个path-likeobject。
os.lchown(path,uid,gid)¶
将path的用户和组ID分别修改为数字形式的uid和gid,本函数不跟踪符号链接。
从Python3.3开始,它等效于os.chown(path,uid,gid,follow_symlinks=False)。
引发一个审计事件os.chown,附带参数path、uid、gid、dir_fd。
適用:Unix。
3.6版更變:接受一个path-likeobject。
os.link(src,dst,*,src_dir_fd=None,dst_dir_fd=None,follow_symlinks=True)¶
创建一个指向src的硬链接,名为dst。
本函数支持将src_dir_fd和dst_dir_fd中的一个或两个指定为基于目录描述符的相对路径,支持不跟踪符号链接。
引发一个审计事件os.link附带参数src、dst、src_dir_fd、dst_dir_fd。
適用:Unix、Windows。
3.2版更變:新支援Windows。
3.3版新加入:增加src_dir_fd、dst_dir_fd與follow_symlinks引數。
3.6版更變:接受一个类路径对象作为src和dst。
os.listdir(path='.')¶
返回一个包含由path指定目录中条目名称组成的列表。
该列表按任意顺序排列,并且不包括特殊条目'.'和'..',即使它们存在于目录中。
如果有文件在调用此函数期间在被移除或添加到目录中,是否要包括该文件的名称并没有规定。
path可以是类路径对象。
如果path是(直接传入或通过PathLike接口间接传入)bytes类型,则返回的文件名也将是bytes类型,其他情况下是str类型。
本函数也支持指定文件描述符为参数,其中描述符必须指向目录。
引发一个审计事件os.listdir,附带参数path。
備註
要将str类型的文件名编码为bytes,请使用fsencode()。
也參考
scandir()函数返回目录内文件名的同时,也返回文件属性信息,它在某些具体情况下能提供更好的性能。
3.2版更變:path变为可选参数。
3.3版新加入:新增支持将path参数指定为打开的文件描述符。
3.6版更變:接受一个path-likeobject。
os.lstat(path,*,dir_fd=None)¶
在给定路径上执行本函数,其操作相当于lstat()系统调用,类似于stat()但不跟踪符号链接。
返回值是stat_result对象。
在不支持符号链接的平台上,本函数是stat()的别名。
从Python3.3起,此功能等价于os.stat(path,dir_fd=dir_fd,follow_symlinks=False)。
本函数支持基于目录描述符的相对路径。
也參考
stat()函数。
3.2版更變:添加对Windows6.0(Vista)符号链接的支持。
3.3版更變:新增dir_fd參數。
3.6版更變:接受一个path-likeobject。
3.8版更變:目前在Windows上,遇到表示另一个路径的重解析点(即名称代理,包括符号链接和目录结点),本函数将打开它。
其他种类的重解析点由stat()交由操作系统解析。
os.mkdir(path,mode=511,*,dir_fd=None)¶
创建一个名为path的目录,应用以数字表示的权限模式mode。
Ifthedirectoryalreadyexists,FileExistsErrorisraised.Ifaparent
directoryinthepathdoesnotexist,FileNotFoundErrorisraised.
某些系统会忽略mode。
如果没有忽略它,那么将首先从它中减去当前的umask值。
如果除最后9位(即mode八进制的最后3位)之外,还设置了其他位,则其他位的含义取决于各个平台。
在某些平台上,它们会被忽略,应显式调用chmod()进行设置。
本函数支持基于目录描述符的相对路径。
如果需要创建临时目录,请参阅tempfile模块中的tempfile.mkdtemp()函数。
引发一个审计事件os.mkdir,附带参数path、mode、dir_fd。
3.3版新加入:dir_fd引數。
3.6版更變:接受一个path-likeobject。
os.makedirs(name,mode=511,exist_ok=False)¶
递归目录创建函数。
与mkdir()类似,但会自动创建到达最后一级目录所需要的中间目录。
mode参数会传递给mkdir(),用来创建最后一级目录,对于该参数的解释,请参阅mkdir()中的描述。
要设置某些新建的父目录的权限,可以在调用makedirs()之前设置umask。
现有父目录的权限不会更改。
如果exist_ok为False(默认值),则如果目标目录已存在将引发FileExistsError。
備註
如果要创建的路径元素包含pardir(如UNIX系统中的"..")makedirs()将无法明确目标。
本函数能正确处理UNC路径。
引发一个审计事件os.mkdir,附带参数path、mode、dir_fd。
3.2版新加入:exist_ok參數。
3.4.1版更變:在Python3.4.1以前,如果exist_ok为True,且目录已存在,且mode与现有目录的权限不匹配,makedirs()仍会抛出错误。
由于无法安全地实现此行为,因此在Python3.4.1中将该行为删除。
请参阅bpo-21082。
3.6版更變:接受一个path-likeobject。
3.7版更變:mode参数不再影响新创建的中间目录的权限。
os.mkfifo(path,mode=438,*,dir_fd=None)¶
创建一个名为path的FIFO(命名管道,一种先进先出队列),具有以数字表示的权限状态mode。
将从mode中首先减去当前的umask值。
本函数支持基于目录描述符的相对路径。
FIFO是可以像常规文件一样访问的管道。
FIFO如果没有被删除(如使用os.unlink()),会一直存在。
通常,FIFO用作“客户端”和“服务器”进程之间的汇合点:服务器打开FIFO进行读取,而客户端打开FIFO进行写入。
请注意,mkfifo()不会打开FIFO---它只是创建汇合点。
適用:Unix。
3.3版新加入:dir_fd引數。
3.6版更變:接受一个path-likeobject。
os.mknod(path,mode=384,device=0,*,dir_fd=None)¶
创建一个名为path的文件系统节点(文件,设备专用文件或命名管道)。
mode指定权限和节点类型,方法是将权限与下列节点类型stat.S_IFREG、stat.S_IFCHR、stat.S_IFBLK和stat.S_IFIFO之一(按位或)组合(这些常量可以在stat模块中找到)。
对于stat.S_IFCHR和stat.S_IFBLK,device参数指定了新创建的设备专用文件(可能会用到os.makedev()),否则该参数将被忽略。
本函数支持基于目录描述符的相对路径。
適用:Unix。
3.3版新加入:dir_fd引數。
3.6版更變:接受一个path-likeobject。
os.major(device)¶
提取主设备号,提取自原始设备号(通常是stat中的st_dev或st_rdev字段)。
os.minor(device)¶
提取次设备号,提取自原始设备号(通常是stat中的st_dev或st_rdev字段)。
os.makedev(major,minor)¶
将主设备号和次设备号组合成原始设备号。
os.pathconf(path,name)¶
返回所给名称的文件有关的系统配置信息。
name指定要查找的配置名称,它可以是字符串,是一个系统已定义的名称,这些名称定义在不同标准(POSIX.1,Unix95,Unix98等)中。
一些平台还定义了额外的其他名称。
当前操作系统已定义的名称在pathconf_names字典中给出。
对于未包含在该映射中的配置名称,也可以传递一个整数作为name。
如果name是一个字符串且不是已定义的名称,将抛出ValueError异常。
如果当前系统不支持name指定的配置名称,即使该名称存在于pathconf_names,也会抛出OSError异常,错误码为errno.EINVAL。
本函数支持指定文件描述符为参数。
適用:Unix。
3.6版更變:接受一个path-likeobject。
os.pathconf_names¶
字典,表示映射关系,为pathconf()和fpathconf()可接受名称与操作系统为这些名称定义的整数值之间的映射。
这可用于判断系统已定义了哪些名称。
適用:Unix。
os.readlink(path,*,dir_fd=None)¶
返回一个字符串,为符号链接指向的实际路径。
其结果可以是绝对或相对路径。
如果是相对路径,则可用os.path.join(os.path.dirname(path),result)转换为绝对路径。
如果path是字符串对象(直接传入或通过PathLike接口间接传入),则结果也将是字符串对象,且此类调用可能会引发UnicodeDecodeError。
如果path是字节对象(直接传入或间接传入),则结果将会是字节对象。
本函数支持基于目录描述符的相对路径。
当尝试解析的路径可能含有链接时,请改用realpath()以正确处理递归和平台差异。
適用:Unix、Windows。
3.2版更變:添加对Windows6.0(Vista)符号链接的支持。
3.3版新加入:dir_fd引數。
3.6版更變:在Unix上可以接受一个类路径对象。
3.8版更變:在Windows上接受类路径对象和字节对象。
3.8版更變:增加了对目录链接的支持,且返回值改为了“替换路径”的形式(通常带有\\?\前缀),而不是先前那样返回可选的"printname"字段。
os.remove(path,*,dir_fd=None)¶
移除(删除)文件path。
如果path是目录,则会引发IsADirectoryError。
请使用rmdir()来删除目录。
如果文件不存在,则会引发FileNotFoundError。
本函数支持基于目录描述符的相对路径。
在Windows上,尝试删除正在使用的文件会抛出异常。
而在Unix上,虽然该文件的条目会被删除,但分配给文件的存储空间仍然不可用,直到原始文件不再使用为止。
本函数在语义上与unlink()相同。
引发一个审计事件os.remove,附带参数path、dir_fd。
3.3版新加入:dir_fd引數。
3.6版更變:接受一个path-likeobject。
os.removedirs(name)¶
递归删除目录。
工作方式类似于rmdir(),不同之处在于,如果成功删除了末尾一级目录,removedirs()会尝试依次删除path中提到的每个父目录,直到抛出错误为止(但该错误会被忽略,因为这通常表示父目录不是空目录)。
例如,os.removedirs('foo/bar/baz')将首先删除目录'foo/bar/baz',然后如果'foo/bar'和'foo'为空,则继续删除它们。
如果无法成功删除末尾一级目录,则抛出OSError异常。
引发一个审计事件os.remove,附带参数path、dir_fd。
3.6版更變:接受一个path-likeobject。
os.rename(src,dst,*,src_dir_fd=None,dst_dir_fd=None)¶
将文件或目录src重命名为dst。
如果dst已存在,则下列情况下将会操作失败,并抛出OSError的子类:
在Windows上,如果dst已存在,则抛出FileExistsError异常。
在Unix上,如果src是文件而dst是目录,将抛出IsADirectoryError异常,反之则抛出NotADirectoryError异常。
如果两者都是目录且dst为空,则dst将被静默替换。
如果dst是非空目录,则抛出OSError异常。
如果两者都是文件,则在用户具有权限的情况下,将对dst进行静默替换。
如果src和dst在不同的文件系统上,则本操作在某些Unix分支上可能会失败。
如果成功,重命名操作将是一个原子操作(这是POSIX的要求)。
本函数支持将src_dir_fd和dst_dir_fd中的一个或两个指定为基于目录描述符的相对路径。
如果需要在不同平台上都能替换目标,请使用replace()。
引发一个审计事件os.rename附带参数src、dst、src_dir_fd、dst_dir_fd。
3.3版新加入:src_dir_fd和dst_dir_fd参数。
3.6版更變:接受一个类路径对象作为src和dst。
os.renames(old,new)¶
递归重命名目录或文件。
工作方式类似rename(),除了会首先创建新路径所需的中间目录。
重命名后,将调用removedirs()删除旧路径中不需要的目录。
備註
如果用户没有权限删除末级的目录或文件,则本函数可能会无法建立新的目录结构。
引发一个审计事件os.rename附带参数src、dst、src_dir_fd、dst_dir_fd。
3.6版更變:接受一个类路径对象作为old和new。
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中的一个或两个指定为基于目录描述符的相对路径。
引发一个审计事件os.rename附带参数src、dst、src_dir_fd、dst_dir_fd。
3.3版新加入.
3.6版更變:接受一个类路径对象作为src和dst。
os.rmdir(path,*,dir_fd=None)¶
移除(删除)目录path。
如果目录不存在或不为空,则会分别抛出FileNotFoundError或OSError异常。
要删除整个目录树,可以使用shutil.rmtree()。
本函数支持基于目录描述符的相对路径。
引发一个审计事件os.rmdir,附带参数path、dir_fd。
3.3版新加入:dir_fd參數。
3.6版更變:接受一个path-likeobject。
os.scandir(path='.')¶
返回一个os.DirEntry对象的迭代器,它们对应于由path指定目录中的条目。
这些条目会以任意顺序生成,并且不包括特殊条目'.'和'..'。
如果有文件在迭代器创建之后在目录中被移除或添加,是否要包括该文件对应的条目并没有规定。
如果需要文件类型或文件属性信息,使用scandir()代替listdir()可以大大提高这部分代码的性能,因为如果操作系统在扫描目录时返回的是os.DirEntry对象,则该对象包含了这些信息。
所有os.DirEntry的方法都可能执行一次系统调用,但是is_dir()和is_file()通常只在有符号链接时才执行一次系统调用。
os.DirEntry.stat()在Unix上始终需要一次系统调用,而在Windows上只在有符号链接时才需要。
path可以是类路径对象。
如果path是(直接传入或通过PathLike接口间接传入的)bytes类型,那么每个os.DirEntry的name和path属性将是bytes类型,其他情况下是str类型。
本函数也支持指定文件描述符为参数,其中描述符必须指向目录。
引发一个审计事件os.scandir,附带参数path。
scandir()迭代器支持上下文管理协议,并具有以下方法:
scandir.close()¶
关闭迭代器并释放占用的资源。
当迭代器迭代完毕,或垃圾回收,或迭代过程出错时,将自动调用本方法。
但仍建议显式调用它或使用with语句。
3.6版新加入.
下面的例子演示了scandir()的简单用法,用来显示给定path中所有不以'.'开头的文件(不包括目录)。
entry.is_file()通常不会增加一次额外的系统调用:
withos.scandir(path)asit:
forentryinit:
ifnotentry.name.startswith('.')andentry.is_file():
print(entry.name)
備註
在基于Unix的系统上,scandir()使用系统的opendir()和readdir()函数。
在Windows上,它使用Win32FindFirstFileW和FindNextFileW函数。
3.5版新加入.
3.6版新加入:添加了对上下文管理协议和close()方法的支持。
如果scandir()迭代器没有迭代完毕且没有显式关闭,其析构函数将发出ResourceWarning警告。
本函数接受一个类路径对象。
3.7版更變:在Unix上新增支持指定文件描述符为参数。
classos.DirEntry¶
由scandir()生成的对象,用于显示目录内某个条目的文件路径和其他文件属性。
scandir()将在不进行额外系统调用的情况下,提供尽可能多的此类信息。
每次进行stat()或lstat()系统调用时,os.DirEntry对象会将结果缓存下来。
os.DirEntry实例不适合存储在长期存在的数据结构中,如果你知道文件元数据已更改,或者自调用scandir()以来已经经过了很长时间,请调用os.stat(entry.path)来获取最新信息。
因为os.DirEntry方法可以进行系统调用,所以它也可能抛出OSError异常。
如需精确定位错误,可以逐个调用os.DirEntry中的方法来捕获OSError,并适当处理。
为了能直接用作类路径对象,os.DirEntry实现了PathLike接口。
os.DirEntry实例所包含的属性和方法如下:
name¶
本条目的基本文件名,是根据scandir()的path参数得出的相对路径。
如果scandir()的path参数是bytes类型,则name属性也是bytes类型,否则为str。
使用fsdecode()解码byte类型的文件名。
path¶
本条目的完整路径:等效于os.path.join(scandir_path,entry.name),其中scandir_path就是scandir()的path参数。
仅当scandir()的path参数为绝对路径时,本路径才是绝对路径。
如果scandir()的path参数是文件描述符,则path属性与上述name属性相同。
如果scandir()的path参数是bytes类型,则path属性也是bytes类型,否则为str。
使用fsdecode()解码byte类型的文件名。
inode()¶
返回本条目的索引节点号(inodenumber)。
这一结果是缓存在os.DirEntry对象中的,请调用os.stat(entry.path,follow_symlinks=False).st_ino来获取最新信息。
一开始没有缓存时,在Windows上需要一次系统调用,但在Unix上不需要。
is_dir(*,follow_symlinks=True)¶
如果本条目是目录,或是指向目录的符号链接,则返回True。
如果本条目是文件,或指向任何其他类型的文件,或该目录不再存在,则返回False。
如果follow_symlinks是False,那么仅当本条目为目录时返回True(不跟踪符号链接),如果本条目是任何类型的文件,或该文件不再存在,则返回False。
这一结果是缓存在os.DirEntry对象中的,且follow_symlinks为True和False时的缓存是分开的。
请调用os.stat()和stat.S_ISDIR()来获取最新信息。
一开始没有缓存时,大多数情况下不需要系统调用。
特别是对于非符号链接,Windows和Unix都不需要系统调用,除非某些Unix文件系统(如网络文件系统)返回了dirent.d_type==DT_UNKNOWN。
如果本条目是符号链接,则需要一次系统调用来跟踪它(除非follow_symlinks为False)。
本方法可能抛出OSError异常,如PermissionError异常,但FileNotFoundError异常会被内部捕获且不会抛出。
is_file(*,follow_symlinks=True)¶
如果本条目是文件,或是指向文件的符号链接,则返回True。
如果本条目是目录,或指向目录,或指向其他非文件条目,或该文件不再存在,则返回False。
如果follow_symlinks是False,那么仅当本条目为文件时返回True(不跟踪符号链接),如果本条目是目录或其他非文件条目,或该文件不再存在,则返回False。
这一结果是缓存在os.DirEntry对象中的。
缓存、系统调用、异常抛出都与is_dir()一致。
is_symlink()¶
如果本条目是符号链接(即使是断开的链接),返回True。
如果是目录或任何类型的文件,或本条目不再存在,返回False。
这一结果是缓存在os.DirEntry对象中的,请调用os.path.islink()来获取最新信息。
一开始没有缓存时,大多数情况下不需要系统调用。
其实Windows和Unix都不需要系统调用,除非某些Unix文件系统(如网络文件系统)返回了dirent.d_type==DT_UNKNOWN。
本方法可能抛出OSError异常,如PermissionError异常,但FileNotFoundError异常会被内部捕获且不会抛出。
stat(*,follow_symlinks=True)¶
返回本条目对应的stat_result对象。
本方法默认会跟踪符号链接,要获取符号链接本身的stat,请添加follow_symlinks=False参数。
在Unix上,本方法需要一次系统调用。
在Windows上,仅在follow_symlinks为True且该条目是一个重解析点(如符号链接或目录结点)时,才需要一次系统调用。
在Windows上,stat_result的st_ino、st_dev和st_nlink属性总是为零。
请调用os.stat()以获得这些属性。
这一结果是缓存在os.DirEntry对象中的,且follow_symlinks为True和False时的缓存是分开的。
请调用os.stat()来获取最新信息。
注意,os.DirEntry和pathlib.Path的几个属性和方法之间存在很好的对应关系。
具体来说是name属性,以及is_dir()、is_file()、is_symlink()和stat()方法,在两个类中具有相同的含义。
3.5版新加入.
3.6版更變:添加了对PathLike接口的支持。
在Windows上添加了对bytes类型路径的支持。
os.stat(path,*,dir_fd=None,follow_symlinks=True)¶
获取文件或文件描述符的状态。
在所给路径上执行等效于stat()系统调用的操作。
path可以是字符串类型,或(直接传入或通过PathLike接口间接传入的)bytes类型,或打开的文件描述符。
返回一个stat_result对象。
本函数默认会跟踪符号链接,要获取符号链接本身的stat,请添加follow_symlinks=False参数,或使用lstat()。
本函数支持指定文件描述符为参数和不跟踪符号链接。
在Windows上,传入follow_symlinks=False将禁用所有名称代理重解析点,其中包括符号链接和目录结点。
其他类型的重解析点将直接打开,比如不像链接的或系统无法跟踪的重解析点。
当多个链接形成一个链时,本方法可能会返回原始链接的stat,无法完整遍历到非链接的对象。
在这种情况下,要获取最终路径的stat,请使用os.path.realpath()函数尽可能地解析路径,并在解析结果上调用lstat()。
这不适用于空链接或交接点,否则会抛出异常。
範例:
>>>importos
>>>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_fd和follow_symlinks参数,可指定文件描述符代替路径。
3.6版更變:接受一个path-likeobject。
3.8版更變:在Windows上,本方法将跟踪系统能解析的所有重解析点,并且传入follow_symlinks=False会停止跟踪所有名称代理重解析点。
现在,如果操作系统遇到无法跟踪的重解析点,stat将返回原始路径的信息,就像已指定follow_symlinks=False一样,而不会抛出异常。
classos.stat_result¶
本对象的属性大致对应于stat结构体成员,主要作为os.stat()、os.fstat()和os.lstat()的返回值。
属性:
st_mode¶
文件模式:包括文件类型和文件模式位(即权限位)。
st_ino¶
与平台有关,但如果不为零,则根据st_dev值唯一地标识文件。
通常:
在Unix上该值表示索引节点号(inodenumber)。
在Windows上该值表示文件索引号。
st_dev¶
该文件所在设备的标识符。
st_nlink¶
硬链接的数量。
st_uid¶
文件所有者的用户ID。
st_gid¶
文件所有者的用户组ID。
st_size¶
文件大小(以字节为单位),文件可以是常规文件或符号链接。
符号链接的大小是它包含的路径的长度,不包括末尾的空字节。
时间戳:
st_atime¶
最近的访问时间,以秒为单位。
st_mtime¶
最近的修改时间,以秒为单位。
st_ctime¶
取决于平台:
在Unix上表示最近的元数据更改时间,
在Windows上表示创建时间,以秒为单位。
st_atime_ns¶
最近的访问时间,以纳秒表示,为整数。
st_mtime_ns¶
最近的修改时间,以纳秒表示,为整数。
st_ctime_ns¶
取决于平台:
在Unix上表示最近的元数据更改时间,
在Windows上表示创建时间,以纳秒表示,为整数。
備註
st_atime、st_mtime和st_ctime属性的确切含义和分辨率取决于操作系统和文件系统。
例如,在使用FAT或FAT32文件系统的Windows上,st_mtime有2秒的分辨率,而st_atime仅有1天的分辨率。
详细信息请参阅操作系统文档。
类似地,尽管st_atime_ns、st_mtime_ns和st_ctime_ns始终以纳秒表示,但许多系统并不提供纳秒精度。
在确实提供纳秒精度的系统上,用于存储st_atime、st_mtime和st_ctime的浮点对象无法保留所有精度,因此不够精确。
如果需要确切的时间戳,则应始终使用st_atime_ns、st_mtime_ns和st_ctime_ns。
在某些Unix系统上(如Linux上),以下属性可能也可用:
st_blocks¶
为文件分配的字节块数,每块512字节。
文件是稀疏文件时,它可能小于st_size/512。
st_blksize¶
“首选的”块大小,用于提高文件系统I/O效率。
写入文件时块大小太小可能会导致读取-修改-重写效率低下。
st_rdev¶
设备类型(如果是inode设备)。
st_flags¶
用户定义的文件标志位。
在其他Unix系统上(如FreeBSD上),以下属性可能可用(但仅当root使用它们时才被填充):
st_gen¶
文件生成号。
st_birthtime¶
文件创建时间。
在Solaris及其衍生版本上,以下属性可能也可用:
st_fstype¶
文件所在文件系统的类型的唯一标识,为字符串。
OnmacOSsystems,thefollowingattributesmayalsobeavailable:
st_rsize¶
文件的实际大小。
st_creator¶
文件的创建者。
st_type¶
文件类型。
在Windows系统上,以下属性也可用:
st_file_attributes¶
Windows文件属性:dwFileAttributes,由GetFileInformationByHandle()返回的BY_HANDLE_FILE_INFORMATION结构体的成员之一。
请参阅stat模块中的FILE_ATTRIBUTE_*常量。
st_reparse_tag¶
当st_file_attributes存在FILE_ATTRIBUTE_REPARSE_POINT集合时,本字段包含重解析点类型标记。
请参阅stat模块中的IO_REPARSE_TAG_*常量。
标准模块stat中定义了函数和常量,这些函数和常量可用于从stat结构体中提取信息。
(在Windows上,某些项填充的是虚值。
)
为了向后兼容,一个stat_result实例还可以作为至少包含10个整数的元组访问,以提供stat结构中最重要(和可移植)的成员,整数顺序为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_ns、st_mtime_ns和st_ctime_ns成员。
3.5版新加入:在Windows上添加了st_file_attributes成员。
3.5版更變:在Windows上,如果可用,会返回文件索引作为st_ino的值。
3.7版新加入:在Solaris及其衍生版本上添加了st_fstype成员。
3.8版新加入:在Windows上添加了st_reparse_tag成员。
3.8版更變:在Windows上,st_mode成员现在可以根据需要将特殊文件标识为S_IFCHR、S_IFIFO或S_IFBLK。
os.statvfs(path)¶
在所给的路径上执行statvfs()系统调用。
返回值是一个对象,其属性描述了所给路径上的文件系统,并且与statvfs结构体的成员相对应,即:f_bsize,f_frsize,f_blocks,f_bfree,f_bavail,f_files,f_ffree,f_favail,f_flag,f_namemax,f_fsid。
为f_flag属性位定义了两个模块级常量:如果存在ST_RDONLY位,则文件系统以只读挂载;如果存在ST_NOSUID位,则文件系统禁用或不支持setuid/setgid位。
为基于GNU/glibc的系统还定义了额外的模块级常量。
它们是ST_NODEV(禁止访问设备专用文件),ST_NOEXEC(禁止执行程序),ST_SYNCHRONOUS(写入后立即同步),ST_MANDLOCK(允许文件系统上的强制锁定),ST_WRITE(写入文件/目录/符号链接),ST_APPEND(仅追加文件),ST_IMMUTABLE(不可变文件),ST_NOATIME(不更新访问时间),ST_NODIRATIME(不更新目录访问时间),ST_RELATIME(相对于mtime/ctime更新访问时间)。
本函数支持指定文件描述符为参数。
適用:Unix。
3.2版更變:新增ST_RDONLY與ST_NOSUID常數。
3.3版新加入:新增支持将path参数指定为打开的文件描述符。
3.4版更變:添加了ST_NODEV、ST_NOEXEC、ST_SYNCHRONOUS、ST_MANDLOCK、ST_WRITE、ST_APPEND、ST_IMMUTABLE、ST_NOATIME、ST_NODIRATIME和ST_RELATIME常量。
3.6版更變:接受一个path-likeobject。
3.7版新加入:新增f_fsid。
os.supports_dir_fd¶
一个set对象,指示os模块中的哪些函数接受一个打开的文件描述符作为dir_fd参数。
不同平台提供的功能不同,且Python用于实现dir_fd参数的底层函数并非在Python支持的所有平台上都可用。
考虑到一致性,支持dir_fd的函数始终允许指定描述符,但如果在底层不支持时调用了该函数,则会抛出异常。
(在所有平台上始终支持将dir_fd指定为None。
)
要检查某个函数是否接受打开的文件描述符作为dir_fd参数,请在supports_dir_fd前使用in运算符。
例如,如果os.stat()在当前平台上接受打开的文件描述符作为dir_fd参数,则此表达式的计算结果为True:
os.statinos.supports_dir_fd
目前dir_fd参数仅在Unix平台上有效,在Windows上均无效。
3.3版新加入.
os.supports_effective_ids¶
一个set对象,指示os.access()是否允许在当前平台上将其effective_ids参数指定为True。
(所有平台都支持将effective_ids指定为False。
)如果当前平台支持,则集合将包含os.access(),否则集合为空。
如果当前平台上的os.access()支持effective_ids=True,则此表达式的计算结果为True:
os.accessinos.supports_effective_ids
目前仅Unix平台支持effective_ids,Windows不支持。
3.3版新加入.
os.supports_fd¶
一个set对象,指示在当前平台上os模块中的哪些函数接受一个打开的文件描述符作为path参数。
不同平台提供的功能不同,且Python所使用到的底层函数(用于实现接受描述符作为path)并非在Python支持的所有平台上都可用。
要判断某个函数是否接受打开的文件描述符作为path参数,请在supports_fd前使用in运算符。
例如,如果os.chdir()在当前平台上接受打开的文件描述符作为path参数,则此表达式的计算结果为True:
os.chdirinos.supports_fd
3.3版新加入.
os.supports_follow_symlinks¶
一个set对象,指示在当前平台上os模块中的哪些函数的follow_symlinks参数可指定为False。
不同平台提供的功能不同,且Python用于实现follow_symlinks的底层函数并非在Python支持的所有平台上都可用。
考虑到一致性,支持follow_symlinks的函数始终允许将其指定为False,但如果在底层不支持时调用了该函数,则会抛出异常。
(在所有平台上始终支持将follow_symlinks指定为True。
)
要检查某个函数的follow_symlinks参数是否可以指定为False,请在supports_follow_symlinks前使用in运算符。
例如,如果在当前平台上调用os.stat()时可以指定follow_symlinks=False,则此表达式的计算结果为True:
os.statinos.supports_follow_symlinks
3.3版新加入.
os.symlink(src,dst,target_is_directory=False,*,dir_fd=None)¶
创建一个指向src的符号链接,名为dst。
在Windows上,符号链接可以表示文件或目录两种类型,并且不会动态改变类型。
如果目标存在,则新建链接的类型将与目标一致。
否则,如果target_is_directory为True,则符号链接将创建为目录链接,为False(默认)将创建为文件链接。
在非Windows平台上,target_is_directory被忽略。
本函数支持基于目录描述符的相对路径。
備註
在Windows10或更高版本上,如果启用了开发人员模式,非特权帐户可以创建符号链接。
如果开发人员模式不可用/未启用,则需要SeCreateSymbolicLinkPrivilege权限,或者该进程必须以管理员身份运行。
当本函数由非特权账户调用时,抛出OSError异常。
引发一个审计事件os.symlink,附带参数src、dst、dir_fd。
適用:Unix、Windows。
3.2版更變:添加对Windows6.0(Vista)符号链接的支持。
3.3版新加入:添加了dir_fd参数,现在在非Windows平台上允许target_is_directory参数。
3.6版更變:接受一个类路径对象作为src和dst。
3.8版更變:针对启用了开发人员模式的Windows,添加了非特权账户创建符号链接的支持。
os.sync()¶
强制将所有内容写入磁盘。
適用:Unix。
3.3版新加入.
os.truncate(path,length)¶
截断path对应的文件,以使其最大为length字节。
本函数支持指定文件描述符为参数。
引发一个审计事件os.truncate,附带参数path,length。
適用:Unix、Windows。
3.3版新加入.
3.5版更變:新增對Windows的支援
3.6版更變:接受一个path-likeobject。
os.unlink(path,*,dir_fd=None)¶
移除(删除)文件path。
该函数在语义上与remove()相同,unlink是其传统的Unix名称。
请参阅remove()的文档以获取更多信息。
引发一个审计事件os.remove,附带参数path、dir_fd。
3.3版新加入:dir_fd參數。
3.6版更變:接受一个path-likeobject。
os.utime(path,times=None,*,[ns,]dir_fd=None,follow_symlinks=True)¶
设置文件path的访问时间和修改时间。
utime()有times和ns两个可选参数,它们指定了设置给path的时间,用法如下:
如果指定ns,它必须是一个(atime_ns,mtime_ns)形式的二元组,其中每个成员都是一个表示纳秒的整数。
如果times不为None,则它必须是(atime,mtime)形式的二元组,其中每个成员都是一个表示秒的int或float。
如果times为None且未指定ns,则相当于指定ns=(atime_ns,mtime_ns),其中两个时间均为当前时间。
同时为times和ns指定元组会出错。
注意,根据操作系统记录访问时间和修改时间的分辨率,后续的stat()调用可能不会返回此处设置的确切时间。
请参阅stat()。
保留精确时间的最佳方法是使用os.stat()结果对象中的st_atime_ns和st_mtime_ns字段,并将ns参数设置为utime。
本函数支持指定文件描述符、指定基于目录描述符的相对路径和不跟踪符号链接。
引发一个审计事件os.utime,附带参数path、times、ns、dir_fd。
3.3版新加入:新增支持将path参数指定为打开的文件描述符,以及支持dir_fd、follow_symlinks和ns参数。
3.6版更變:接受一个path-likeobject。
os.walk(top,topdown=True,onerror=None,followlinks=False)¶
生成目录树中的文件名,方式是按上->下或下->上顺序浏览目录树。
对于以top为根的目录树中的每个目录(包括top本身),它都会生成一个三元组(dirpath,dirnames,filenames)。
dirpath是表示目录路径的字符串。
dirnames是dirpath中子目录名称组成的列表(excluding'.'and'..')。
filenames是dirpath中非目录文件名称组成的列表。
请注意列表中的名称不带路径部分。
要获取dirpath中文件或目录的完整路径(以top打头),请执行os.path.join(dirpath,name)。
列表是否排序取决于具体文件系统。
如果有文件或列表生成期间被移除或添加到dirpath目录中,是否要包括该文件的名称并没有规定。
如果可选参数topdown为True或未指定,则在所有子目录的三元组之前生成父目录的三元组(目录是自上而下生成的)。
如果topdown为False,则在所有子目录的三元组生成之后再生成父目录的三元组(目录是自下而上生成的)。
无论topdown为何值,在生成目录及其子目录的元组之前,都将检索全部子目录列表。
当topdown为True时,调用者可以就地修改dirnames列表(也许用到了del或切片),而walk()将仅仅递归到仍保留在dirnames中的子目录内。
这可用于减少搜索、加入特定的访问顺序,甚至可在继续walk()之前告知walk()由调用者新建或重命名的目录的信息。
当topdown为False时,修改dirnames对walk的行为没有影响,因为在自下而上模式中,dirnames中的目录是在dirpath本身之前生成的。
默认将忽略scandir()调用中的错误。
如果指定了可选参数onerror,它应该是一个函数。
出错时它会被调用,参数是一个OSError实例。
它可以报告错误然后继续遍历,或者抛出异常然后中止遍历。
注意,可以从异常对象的filename属性中获取出错的文件名。
walk()默认不会递归进指向目录的符号链接。
可以在支持符号链接的系统上将followlinks设置为True,以访问符号链接指向的目录。
備註
注意,如果链接指向自身的父目录,则将followlinks设置为True可能导致无限递归。
walk()不会记录它已经访问过的目录。
備註
如果传入的是相对路径,请不要在恢复walk()之间更改当前工作目录。
walk()不会更改当前目录,并假定其调用者也不会更改当前目录。
下面的示例遍历起始目录内所有子目录,打印每个目录内的文件占用的字节数,CVS子目录不会被遍历:
importos
fromos.pathimportjoin,getsize
forroot,dirs,filesinos.walk('python/Lib/email'):
print(root,"consumes",end="")
print(sum(getsize(join(root,name))fornameinfiles),end="")
print("bytesin",len(files),"non-directoryfiles")
if'CVS'indirs:
dirs.remove('CVS')#don'tvisitCVSdirectories
在下一个示例(shutil.rmtree()的简单实现)中,必须使树自下而上遍历,因为rmdir()只允许在目录为空时删除目录:
#Deleteeverythingreachablefromthedirectorynamedin"top",
#assumingtherearenosymboliclinks.
#CAUTION:Thisisdangerous!Forexample,iftop=='/',it
#coulddeleteallyourdiskfiles.
importos
forroot,dirs,filesinos.walk(top,topdown=False):
fornameinfiles:
os.remove(os.path.join(root,name))
fornameindirs:
os.rmdir(os.path.join(root,name))
引发一个审计事件os.walk,附带参数top,topdown,onerror,followlinks。
3.5版更變:现在,本函数调用的是os.scandir()而不是os.listdir(),从而减少了调用os.stat()的次数而变得更快。
3.6版更變:接受一个path-likeobject。
os.fwalk(top='.',topdown=True,onerror=None,*,follow_symlinks=False,dir_fd=None)¶
本方法的行为与walk()完全一样,除了它产生的是4元组(dirpath,dirnames,filenames,dirfd),并且它支持dir_fd。
dirpath、dirnames和filenames与walk()输出的相同,dirfd是指向目录dirpath的文件描述符。
本函数始终支持基于目录描述符的相对路径和不跟踪符号链接。
但是请注意,与其他函数不同,fwalk()的follow_symlinks的默认值为False。
備註
由于fwalk()会生成文件描述符,而它们仅在下一个迭代步骤前有效,因此如果要将描述符保留更久,则应复制它们(比如使用dup())。
下面的示例遍历起始目录内所有子目录,打印每个目录内的文件占用的字节数,CVS子目录不会被遍历:
importos
forroot,dirs,files,rootfdinos.fwalk('python/Lib/email'):
print(root,"consumes",end="")
print(sum([os.stat(name,dir_fd=rootfd).st_sizefornameinfiles]),
end="")
print("bytesin",len(files),"non-directoryfiles")
if'CVS'indirs:
dirs.remove('CVS')#don'tvisitCVSdirectories
在下一个示例中,必须使树自下而上遍历,因为rmdir()只允许在目录为空时删除目录:
#Deleteeverythingreachablefromthedirectorynamedin"top",
#assumingtherearenosymboliclinks.
#CAUTION:Thisisdangerous!Forexample,iftop=='/',it
#coulddeleteallyourdiskfiles.
importos
forroot,dirs,files,rootfdinos.fwalk(top,topdown=False):
fornameinfiles:
os.unlink(name,dir_fd=rootfd)
fornameindirs:
os.rmdir(name,dir_fd=rootfd)
引发一个审计事件os.fwalk,附带参数top,topdown,onerror,follow_symlinks,dir_fd。
適用:Unix。
3.3版新加入.
3.6版更變:接受一个path-likeobject。
3.7版更變:添加了对bytes类型路径的支持。
os.memfd_create(name[,flags=os.MFD_CLOEXEC])¶
创建一个匿名文件,返回指向该文件的文件描述符。
flags必须是系统上可用的os.MFD_*常量之一(或将它们按位“或”组合起来)。
新文件描述符默认是不可继承的。
name提供的名称会被用作文件名,并且/proc/self/fd/目录中相应符号链接的目标将显示为该名称。
显示的名称始终以memfd:为前缀,并且仅用于调试目的。
名称不会影响文件描述符的行为,因此多个文件可以有相同的名称,不会有副作用。
可用性:Linux3.17或更高版本,且装有glibc2.27或更高版本。
3.8版新加入.
os.MFD_CLOEXEC¶
os.MFD_ALLOW_SEALING¶
os.MFD_HUGETLB¶
os.MFD_HUGE_SHIFT¶
os.MFD_HUGE_MASK¶
os.MFD_HUGE_64KB¶
os.MFD_HUGE_512KB¶
os.MFD_HUGE_1MB¶
os.MFD_HUGE_2MB¶
os.MFD_HUGE_8MB¶
os.MFD_HUGE_16MB¶
os.MFD_HUGE_32MB¶
os.MFD_HUGE_256MB¶
os.MFD_HUGE_512MB¶
os.MFD_HUGE_1GB¶
os.MFD_HUGE_2GB¶
os.MFD_HUGE_16GB¶
以上标志位可以传递给memfd_create()。
可用性:Linux3.17或更高版本,且装有glibc2.27或更高版本。
MFD_HUGE*标志仅在Linux4.14及以上可用。
3.8版新加入.
os.eventfd(initval[,flags=os.EFD_CLOEXEC])¶
创建并返回一个事件文件描述符。
此文件描述符支持缓冲区大小为8的原生read()和write()操作、select()、poll()等类似操作。
更多信息请参阅man文档eventfd(2)。
默认情况下,新的文件描述符是non-inheritable。
initval是事件计数器的初始值。
初始值必须是一个32位无符号整数。
请注意,虽然事件计数器是一个无符号的64位整数,其最大值为264-2,但初始值仍被限制为32位无符号整数。
flags可由EFD_CLOEXEC、EFD_NONBLOCK和EFD_SEMAPHORE组合而成。
如果设置了EFD_SEMAPHORE,并且事件计数器非零,那么eventfd_read()将返回1并将计数器递减1。
如果未设置EFD_SEMAPHORE,并且事件计数器非零,那么eventfd_read()返回当前的事件计数器值,并将计数器重置为零。
如果事件计数器为0,并且未设置EFD_NONBLOCK,那么eventfd_read()会阻塞。
eventfd_write()会递增事件计数器。
如果写操作会让计数器的增量大于264-2,则写入会被阻止。
範例:
importos
#semaphorewithstartvalue'1'
fd=os.eventfd(1,os.EFD_SEMAPHORE|os.EFC_CLOEXEC)
try:
#acquiresemaphore
v=os.eventfd_read(fd)
try:
do_work()
finally:
#releasesemaphore
os.eventfd_write(fd,v)
finally:
os.close(fd)
可用性:Linux2.6.27以上版本,带有glibc2.8以上版本。
3.10版新加入.
os.eventfd_read(fd)¶
从一个eventfd()文件描述符中读取数据,并返回一个64位无符号整数。
该函数不会校验fd是否为eventfd()。
適用:請見eventfd()
3.10版新加入.
os.eventfd_write(fd,value)¶
向一个eventfd()文件描述符加入数据。
value必须是一个64位无符号整数。
本函数不会校验fd是否为eventfd()。
適用:請見eventfd()
3.10版新加入.
os.EFD_CLOEXEC¶
为新的eventfd()文件描述符设置close-on-exec标志。
適用:請見eventfd()
3.10版新加入.
os.EFD_NONBLOCK¶
为新的eventfd()文件描述符设置O_NONBLOCK状态标志。
適用:請見eventfd()
3.10版新加入.
os.EFD_SEMAPHORE¶
为读取eventfd()文件描述符的操作提供类似信号量的控制。
在读取时,内部计数器递减1。
可用性:Linux2.6.30以上版本,带有glibc2.8以上版本。
3.10版新加入.
Linux扩展属性¶
3.3版新加入.
这些函数仅在Linux上可用。
os.getxattr(path,attribute,*,follow_symlinks=True)¶
返回path的扩展文件系统属性attribute的值。
attribute可以是bytes或str(直接传入或通过PathLike接口间接传入)。
如果是str,则使用文件系统编码来编码字符串。
本函数支持指定文件描述符为参数和不跟踪符号链接。
引发一个审计事件os.getxattr,附带参数path、attribute。
3.6版更變:接受一个类路径对象作为path和attribute。
os.listxattr(path=None,*,follow_symlinks=True)¶
返回一个列表,包含path的所有扩展文件系统属性。
列表中的属性都表示为字符串,它们是根据文件系统编码解码出来的。
如果path为None,则listxattr()将检查当前目录。
本函数支持指定文件描述符为参数和不跟踪符号链接。
引发一个审计事件os.listxattr,附带参数path。
3.6版更變:接受一个path-likeobject。
os.removexattr(path,attribute,*,follow_symlinks=True)¶
移除path中的扩展文件系统属性attribute。
attribute应为字节串或字符串类型(通过PathLike接口直接或间接得到)。
若为字符串类型,则用filesystemencodinganderrorhandler进行编码。
本函数支持指定文件描述符为参数和不跟踪符号链接。
引发一个审计事件os.removexattr,附带参数path、attribute。
3.6版更變:接受一个类路径对象作为path和attribute。
os.setxattr(path,attribute,value,flags=0,*,follow_symlinks=True)¶
将path的文件系统扩展属性attribute设为value。
attribute必须是一个字节串或字符串,不含NUL(通过PathLike接口直接或间接得到)。
若为字符串,将用filesystemencodinganderrorhandler进行编码。
flags可以是XATTR_REPLACE或XATTR_CREATE。
如果给出XATTR_REPLACE而属性不存在,则会触发ENODATA。
如果给出了XATTR_CREATE而属性已存在,则不会创建属性并将触发EEXISTS。
本函数支持指定文件描述符为参数和不跟踪符号链接。
備註
Linuxkernel2.6.39以下版本的一个bug导致在某些文件系统上,flags参数会被忽略。
引发一个审计事件os.setxattr,附带参数path、attribute、value、flags。
3.6版更變:接受一个类路径对象作为path和attribute。
os.XATTR_SIZE_MAX¶
一条扩展属性的值的最大大小。
在当前的Linux上是64KiB。
os.XATTR_CREATE¶
这是setxattr()的flags参数的可取值,它表示该操作必须创建一个属性。
os.XATTR_REPLACE¶
这是setxattr()的flags参数的可取值,它表示该操作必须替换现有属性。
进程管理¶
下列函数可用于创建和管理进程。
所有exec*函数都接受一个参数列表,用来给新程序加载到它的进程中。
在所有情况下,传递给新程序的第一个参数是程序本身的名称,而不是用户在命令行上输入的参数。
对于C程序员来说,这就是传递给main()函数的argv[0]。
例如,os.execv('/bin/echo',['foo','bar'])只会在标准输出上打印bar,而foo会被忽略。
os.abort()¶
发送SIGABRT信号到当前进程。
在Unix上,默认行为是生成一个核心转储。
在Windows上,该进程立即返回退出代码3。
请注意,使用signal.signal()可以为SIGABRT注册Python信号处理程序,而调用本函数将不会调用按前述方法注册的程序。
os.add_dll_directory(path)¶
将路径添加到DLL搜索路径。
Thissearchpathisusedwhenresolvingdependenciesforimported
extensionmodules(themoduleitselfisresolvedthrough
sys.path),andalsobyctypes.
要移除目录,可以在返回的对象上调用close(),也可以在with语句内使用本方法。
参阅Microsoft文档获取如何加载DLL的信息。
引发一个审计事件os.add_dll_directory,附带参数path。
適用:Windows。
3.8版新加入:早期版本的CPython解析DLL时用的是当前进程的默认行为。
这会导致不一致,比如不是每次都会去搜索PATH和当前工作目录,且系统函数(如AddDllDirectory)失效。
在3.8中,DLL的两种主要加载方式现在可以显式覆盖进程的行为,以确保一致性。
请参阅移植说明了解如何更新你的库。
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上,新程序会加载到当前进程中,且进程号与调用者相同。
过程中的错误会被报告为OSError异常。
当前进程会被立即替换。
打开的文件对象和描述符都不会刷新,因此如果这些文件上可能缓冲了数据,则应在调用exec*函数之前使用sys.stdout.flush()或os.fsync()刷新它们。
exec*函数的"l"和"v"变体不同在于命令行参数的传递方式。
如果在编码时固定了参数数量,则"l"变体可能是最方便的,各参数作为execl*()函数的附加参数传入即可。
当参数数量可变时,"v"变体更方便,参数以列表或元组的形式作为args参数传递。
在这两种情况下,子进程的第一个参数都应该是即将运行的命令名称,但这不是强制性的。
结尾包含"p"的变体(execlp()、execlpe()、execvp()和execvpe())将使用PATH环境变量来查找程序file。
当环境被替换时(使用下一段讨论的exec*e变体之一),PATH变量将来自于新环境。
其他变体execl()、execle()、execv()和execve()不使用PATH变量来查找程序,因此path必须包含正确的绝对或相对路径。
对于execle()、execlpe()、execve()和execvpe()(都以"e"结尾),env参数是一个映射,用于定义新进程的环境变量(代替当前进程的环境变量)。
而函数execl()、execlp()、execv()和execvp()会将当前进程的环境变量过继给新进程。
某些平台上的execve()可以将path指定为打开的文件描述符。
当前平台可能不支持此功能,可以使用os.supports_fd检查它是否支持。
如果不可用,则使用它会抛出NotImplementedError异常。
引发一个审计事件os.exec,附带参数path、args、env。
適用:Unix、Windows。
3.3版新加入:新增支持将execve()的path参数指定为打开的文件描述符。
3.6版更變:接受一个path-likeobject。
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¶
退出代码,表示检测到操作系统错误,例如无法fork或创建管道。
適用:Unix。
os.EX_OSFILE¶
退出代码,表示某些系统文件不存在、无法打开或发生其他错误。
適用:Unix。
os.EX_CANTCREAT¶
退出代码,表示无法创建用户指定的输出文件。
適用:Unix。
os.EX_IOERR¶
退出代码,表示对某些文件进行读写时发生错误。
適用:Unix。
os.EX_TEMPFAIL¶
退出代码,表示发生了暂时性故障。
它可能并非意味着真正的错误,例如在可重试的情况下无法建立网络连接。
適用:Unix。
os.EX_PROTOCOL¶
退出代码,表示协议交换是非法的、无效的或无法解读的。
適用:Unix。
os.EX_NOPERM¶
退出代码,表示没有足够的权限执行该操作(但不适用于文件系统问题)。
適用:Unix。
os.EX_CONFIG¶
退出代码,表示发生某种配置错误。
適用:Unix。
os.EX_NOTFOUND¶
退出代码,表示的内容类似于“找不到条目”。
適用:Unix。
os.fork()¶
Fork出一个子进程。
在子进程中返回0,在父进程中返回子进程的进程号。
如果发生错误,则抛出OSError异常。
注意,当从线程中使用fork()时,某些平台(包括FreeBSD<=6.3和Cygwin)存在已知问题。
引发一个审计事件os.fork,没有附带参数。
3.8版更變:不再支持在子解释器中调用fork()(将抛出RuntimeError异常)。
警告
有关SSL模块与fork()结合的应用,请参阅ssl。
適用:Unix。
os.forkpty()¶
Fork出一个子进程,使用新的伪终端作为子进程的控制终端。
返回一对(pid,fd),其中pid在子进程中为0,这是父进程中新子进程的进程号,而fd是伪终端主设备的文件描述符。
对于更便于移植的方法,请使用pty模块。
如果发生错误,则抛出OSError异常。
引发一个审计事件os.forkpty,没有附带参数。
3.8版更變:不再支持在子解释器中调用forkpty()(将抛出RuntimeError异常)。
適用:部分的Unix。
os.kill(pid,sig)¶
将信号sig发送至进程pid。
特定平台上可用的信号常量定义在signal模块中。
Windows:signal.CTRL_C_EVENT和signal.CTRL_BREAK_EVENT信号是特殊信号,只能发送给共享同一个控制台窗口的控制台进程,如某些子进程。
sig取任何其他值将导致该进程被TerminateProcessAPI无条件终止,且退出代码为sig。
Windows版本的kill()还需要传入待结束进程的句柄。
另請參閱signal.pthread_kill()。
引发一个审计事件os.kill,附带参数pid、sig。
3.2版新加入:Windows支持。
os.killpg(pgid,sig)¶
将信号sig发送给进程组pgid。
引发一个审计事件os.killpg,附带参数pgid、sig。
適用:Unix。
os.nice(increment)¶
将进程的优先级(nice值)增加increment,返回新的nice值。
適用:Unix。
os.pidfd_open(pid,flags=0)¶
返回一个文件描述符,它指向进程pid。
该描述符可用于管理进程,避免出现竞争和信号。
flags参数提供给将来扩展使用,当前没有定义标志值。
更多細節請見pidfd_open(2)手冊頁。
適用:Linux5.3+
3.9版新加入.
os.plock(op)¶
将程序段锁定到内存中。
op的值(定义在
適用:Unix。
os.popen(cmd,mode='r',buffering=-1)¶
打开一个管道,它通往/接受自命令cmd。
返回值是连接到管道的文件对象,根据mode是'r'(默认)还是'w'决定该对象可以读取还是写入。
buffering参数与内置函数open()相应的参数含义相同。
返回的文件对象只能读写文本字符串,不能是字节类型。
如果子进程成功退出,则close方法返回None。
如果发生错误,则返回子进程的返回码。
在POSIX系统上,如果返回码为正,则它就是进程返回值左移一个字节后的值。
如果返回码为负,则进程是被信号终止的,返回码取反后就是该信号。
(例如,如果子进程被终止,则返回值可能是-signal.SIGKILL。
)在Windows系统上,返回值包含子进程的返回码(有符号整数)。
在Unix上,waitstatus_to_exitcode()可以将close方法的返回值(即退出状态,不能是None)转换为退出码。
在Windows上,close方法的结果直接就是退出码(或None)。
本方法是使用subprocess.Popen实现的,如需更强大的方法来管理和沟通子进程,请参阅该类的文档。
os.posix_spawn(path,argv,env,*,file_actions=None,setpgroup=None,resetids=False,setsid=False,setsigmask=(),setsigdef=(),scheduler=None)¶
包装posix_spawn()C库API,使其可以从Python调用。
大多数用户应使用subprocess.run()代替posix_spawn()。
仅位置参数(Positional-onlyarguments)path、args和env与execve()中的类似。
path形参是可执行文件的路径,path中应当包含目录。
使用posix_spawnp()可传入不带目录的可执行文件。
file_actions参数可以是由元组组成的序列,序列描述了对子进程中指定文件描述符采取的操作,这些操作会在C库实现的fork()和exec()步骤间完成。
每个元组的第一个元素必须是下面列出的三个类型指示符之一,用于描述元组剩余的元素:
os.POSIX_SPAWN_OPEN¶
(os.POSIX_SPAWN_OPEN,fd,path,flags,mode)
执行os.dup2(os.open(path,flags,mode),fd)。
os.POSIX_SPAWN_CLOSE¶
(os.POSIX_SPAWN_CLOSE,fd)
执行os.close(fd)。
os.POSIX_SPAWN_DUP2¶
(os.POSIX_SPAWN_DUP2,fd,new_fd)
执行os.dup2(fd,new_fd)。
这些元组对应于C库posix_spawn_file_actions_addopen(),posix_spawn_file_actions_addclose()和posix_spawn_file_actions_adddup2()API调用,它们为调用posix_spawn()自身做准备。
setpgroup参数将子进程的进程组设置为指定值。
如果指定值为0,则子进程的进程组ID将与其进程ID相同。
如果未设置setpgroup值,则子进程将继承父进程的进程组ID。
本参数对应于C库POSIX_SPAWN_SETPGROUP标志。
如果resetids参数为True,则会将子进程的有效用户ID和有效组ID重置为父进程的实际用户ID和实际组ID。
如果该参数为False,则子进程保留父进程的有效用户ID和有效组ID。
无论哪种情况,若在可执行文件上启用了“设置用户ID”和“设置组ID”权限位,它们将覆盖有效用户ID和有效组ID的设置。
本参数对应于C库POSIX_SPAWN_RESETIDS标志。
如果setsid参数为True,它将为posix_spawn新建一个会话ID。
setsid需要POSIX_SPAWN_SETSID或POSIX_SPAWN_SETSID_NP标志,否则会抛出NotImplementedError异常。
setsigmask参数将信号掩码设置为指定的信号集合。
如果未使用该参数,则子进程将继承父进程的信号掩码。
本参数对应于C库POSIX_SPAWN_SETSIGMASK标志。
sigdef参数将集合中所有信号的操作全部重置为默认。
本参数对应于C库POSIX_SPAWN_SETSIGDEF标志。
scheduler参数必须是一个元组,其中包含调度器策略(可选)以及携带了调度器参数的sched_param实例。
在调度器策略所在位置为None表示未提供该值。
本参数是C库POSIX_SPAWN_SETSCHEDPARAM和POSIX_SPAWN_SETSCHEDULER标志的组合。
引发一个审计事件os.posix_spawn,附带参数path、argv、env。
3.8版新加入.
適用:Unix。
os.posix_spawnp(path,argv,env,*,file_actions=None,setpgroup=None,resetids=False,setsid=False,setsigmask=(),setsigdef=(),scheduler=None)¶
包装posix_spawnp()C库API,使其可以从Python调用。
与posix_spawn()相似,但是系统会在PATH环境变量指定的目录列表中搜索可执行文件executable(与execvp(3)相同)。
引发一个审计事件os.posix_spawn,附带参数path、argv、env。
3.8版新加入.
可用性:请参阅posix_spawn()文档。
os.register_at_fork(*,before=None,after_in_parent=None,after_in_child=None)¶
注册可调用对象,在使用os.fork()或类似的进程克隆API派生新的子进程时,这些对象会运行。
参数是可选的,且为仅关键字(Keyword-only)参数。
每个参数指定一个不同的调用点。
before是一个函数,在fork子进程前调用。
after_in_parent是一个函数,在fork子进程后从父进程调用。
after_in_child是一个函数,从子进程中调用。
只有希望控制权回到Python解释器时,才进行这些调用。
典型的子进程启动时不会触发它们,因为子进程不会重新进入解释器。
在注册的函数中,用于fork前运行的函数将按与注册相反的顺序调用。
用于fork后(从父进程或子进程)运行的函数按注册顺序调用。
注意,第三方C代码的fork()调用可能不会调用这些函数,除非它显式调用了PyOS_BeforeFork()、PyOS_AfterFork_Parent()和PyOS_AfterFork_Child()。
函数注册后无法注销。
適用:Unix。
3.7版新加入.
os.spawnl(mode,path,...)¶
os.spawnle(mode,path,...,env)¶
os.spawnlp(mode,file,...)¶
os.spawnlpe(mode,file,...,env)¶
os.spawnv(mode,path,args)¶
os.spawnve(mode,path,args,env)¶
os.spawnvp(mode,file,args)¶
os.spawnvpe(mode,file,args,env)¶
在新进程中执行程序path。
(注意,subprocess模块提供了更强大的工具来生成新进程并跟踪执行结果,使用该模块比使用这些函数更好。
尤其应当检查使用subprocess模块替换旧函数部分。
)
mode为P_NOWAIT时,本函数返回新进程的进程号。
mode为P_WAIT时,如果进程正常退出,返回退出代码,如果被终止,返回-signal,其中signal是终止进程的信号。
在Windows上,进程号实际上是进程句柄,因此可以与waitpid()函数一起使用。
注意在VxWorks上,新进程被终止时,本函数不会返回-signal,而是会抛出OSError异常。
spawn*函数的"l"和"v"变体不同在于命令行参数的传递方式。
如果在编码时固定了参数数量,则"l"变体可能是最方便的,各参数作为spawnl*()函数的附加参数传入即可。
当参数数量可变时,"v"变体更方便,参数以列表或元组的形式作为args参数传递。
在这两种情况下,子进程的第一个参数都必须是即将运行的命令名称。
结尾包含第二个"p"的变体(spawnlp()、spawnlpe()、spawnvp()和spawnvpe())将使用PATH环境变量来查找程序file。
当环境被替换时(使用下一段讨论的spawn*e变体之一),PATH变量将来自于新环境。
其他变体spawnl()、spawnle()、spawnv()和spawnve()不使用PATH变量来查找程序,因此path必须包含正确的绝对或相对路径。
对于spawnle()、spawnlpe()、spawnve()和spawnvpe()(都以"e"结尾),env参数是一个映射,用于定义新进程的环境变量(代替当前进程的环境变量)。
而函数spawnl()、spawnlp()、spawnv()和spawnvp()会将当前进程的环境变量过继给新进程。
注意,env字典中的键和值必须是字符串。
无效的键或值将导致函数出错,返回值为127。
例如,以下对spawnlp()和spawnvpe()的调用是等效的:
importos
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)
引发一个审计事件os.spawn,附带参数mode、path、args、env。
可用性:Unix,Windows。
spawnlp()、spawnlpe()、spawnvp()和spawnvpe()在Windows上不可用。
spawnle()和spawnve()在Windows上不是线程安全的,建议使用subprocess模块替代。
3.6版更變:接受一个path-likeobject。
os.P_NOWAIT¶
os.P_NOWAITO¶
spawn*系列函数的mode参数的可取值。
如果给出这些值中的任何一个,则spawn*()函数将在创建新进程后立即返回,且返回值为进程号。
適用:Unix、Windows。
os.P_WAIT¶
spawn*系列函数的mode参数的可取值。
如果将mode指定为该值,则spawn*()函数将在新进程运行完毕后返回,运行成功则返回进程的退出代码,被信号终止则返回-signal。
適用:Unix、Windows。
os.P_DETACH¶
os.P_OVERLAY¶
spawn*系列函数的mode参数的可取值。
它们比上面列出的值可移植性差。
P_DETACH与P_NOWAIT相似,但是新进程会与父进程的控制台脱离。
使用P_OVERLAY则会替换当前进程,spawn*函数将不会返回。
適用:Windows。
os.startfile(path[,operation][,arguments][,cwd][,show_cmd])¶
使用已关联的应用程序打开文件。
当operation未指定或指定为'open'时,这类似于在Windows资源管理器中双击文件,或在交互式命令行中将文件名作为start命令的参数:通过扩展名相关联的应用程序(如果有)打开文件。
当指定另一个operation时,它必须是一个“命令动词”("commandverb"),该词指定对文件执行的操作。
Microsoft文档中的常用动词有'print'和'edit'(用于文件),以及'explore'和'find'(用于目录)。
在启动某个应用程序时,arguments将作为一个字符串传入。
若是打开某个文档,此参数可能没什么效果。
默认工作目录是继承而来的,但可以通过cwd参数进行覆盖。
且应为绝对路径。
相对路径path将据此参数进行解析。
show_cmd可用于覆盖默认的窗口样式。
是否生效则取决于被启动的应用程序。
应为Win32函数ShellExecute()所支持的整数值。
在关联的应用程序启动后,startfile()就会立即返回。
没有提供等待应用程序关闭的选项,也没有办法获得应用程序的退出状态。
path形参是基于当前目录或cwd的相对路径。
如果要使用绝对路径,请确保第一个字符不为斜杠('/')。
请用pathlib或os.path.normpath()函数来保证路径已按照Win32的要求进行了正确的编码。
为了减少解释器的启动开销,直到第一次调用本函数后,才解析Win32ShellExecute()函数。
如果无法解析该函数,则抛出NotImplementedError异常。
引发一个审计事件os.startfile,附带参数path、operation。
引发一条审计事件os.startfile/2,附带参数为path、operation、arguments、cwd、show_cmd。
適用:Windows。
3.10版更變:加入了arguments、cwd和show_cmd参数,以及os.startfile/2审计事件。
os.system(command)¶
在子外壳程序中执行此命令(一个字符串)。
这是通过调用标准C函数system()来实现的,并受到同样的限制。
对sys.stdin的更改等不会反映在所执行命令的环境中。
如果command生成了任何输出,它将被发送到解释器的标准输出流。
C标准没有指明这个C函数返回值的含义,因此这个Python函数的返回值取决于具体系统。
在Unix上,返回值为进程的退出状态,以针对wait()而指定的格式进行编码。
在Windows上,返回值是运行command后系统Shell返回的值。
该Shell由Windows环境变量COMSPEC:给出:通常是cmd.exe,它会返回命令的退出状态。
在使用非原生Shell的系统上,请查阅Shell的文档。
subprocess模块提供了更强大的工具来生成新进程并跟踪执行结果,使用该模块比使用本函数更好。
参阅subprocess文档中的使用subprocess模块替换旧函数部分以获取有用的帮助。
在Unix上,waitstatus_to_exitcode()可以将返回值(即退出状态)转换为退出码。
在Windows上,返回值就是退出码。
引发一个审计事件os.system,附带参数command。
適用:Unix、Windows。
os.times()¶
返回当前的全局进程时间。
返回值是一个有5个属性的对象:
user-usertime
system-系統時間
children_user-usertimeofallchildprocesses
children_system-systemtimeofallchildprocesses
elapsed-elapsedrealtimesinceafixedpointinthepast
Forbackwardscompatibility,thisobjectalsobehaveslikeafive-tuple
containinguser,system,children_user,
children_system,andelapsedinthatorder.
SeetheUnixmanualpage
times(2)andtimes(3)manualpageonUnixortheGetProcessTimesMSDN
onWindows.OnWindows,onlyuserandsystemareknown;theotherattributesarezero.
適用:Unix、Windows。
3.3版更變:返回结果的类型由元组变成一个类似元组的对象,同时具有命名的属性。
os.wait()¶
等待子进程执行完毕,返回一个元组,包含其pid和退出状态指示:一个16位数字,其低字节是终止该进程的信号编号,高字节是退出状态码(信号编号为零的情况下),如果生成了核心文件,则低字节的高位会置位。
可以使用waitstatus_to_exitcode()来将退出状态转换为退出码。
適用:Unix。
也參考
waitpid()可以等待特定的子进程执行完毕,且支持更多选项。
os.waitid(idtype,id,options)¶
等待一个或多个子进程执行完毕。
idtype可以是P_PID,P_PGID,P_ALL,或P_PIDFD(Linux可用)。
id指定要等待的pid。
options是由WEXITED、WSTOPPED或WCONTINUED中的一个或多个进行或运算构造的,且额外可以与WNOHANG或WNOWAIT进行或运算。
返回值是一个对象,对应着siginfo_t结构体中的数据,即:si_pid,si_uid,si_signo,si_status,si_code或None(如果指定了WNOHANG且没有子进程处于等待状态)。
適用:Unix。
3.3版新加入.
os.P_PID¶
os.P_PGID¶
os.P_ALL¶
waitid()的idtype参数的可取值。
它们影响id的解释方式。
適用:Unix。
3.3版新加入.
os.P_PIDFD¶
这是仅Linux上存在的一种idtype,它表示id是指向一个进程的文件描述符。
適用:Linux5.4+
3.9版新加入.
os.WEXITED¶
os.WSTOPPED¶
os.WNOWAIT¶
用于waitid()的options参数的标志位,指定要等待的子进程信号。
適用:Unix。
3.3版新加入.
os.CLD_EXITED¶
os.CLD_KILLED¶
os.CLD_DUMPED¶
os.CLD_TRAPPED¶
os.CLD_STOPPED¶
os.CLD_CONTINUED¶
waitid()返回的结果中,si_code的可取值。
適用:Unix。
3.3版新加入.
3.9版更變:添加了CLD_KILLED和CLD_STOPPED值。
os.waitpid(pid,options)¶
本函数的细节在Unix和Windows上有不同之处。
在Unix上:等待进程号为pid的子进程执行完毕,返回一个元组,内含其进程ID和退出状态指示(编码与wait()相同)。
调用的语义受整数options的影响,常规操作下该值应为0。
如果pid大于0,则waitpid()会获取该指定进程的状态信息。
如果pid为0,则获取当前进程所在进程组中的所有子进程的状态。
如果pid为-1,则获取当前进程的子进程状态。
如果pid小于-1,则获取进程组-pid(pid的绝对值)中所有进程的状态。
当系统调用返回-1时,将抛出带有错误码的OSError异常。
在Windows上:等待句柄为pid的进程执行完毕,返回一个元组,内含pid以及左移8位后的退出状态码(移位简化了跨平台使用本函数)。
小于或等于0的pid在Windows上没有特殊含义,且会抛出异常。
整数值options无效。
pid可以指向任何ID已知的进程,不一定是子进程。
调用spawn*函数时传入P_NOWAIT将返回合适的进程句柄。
可以使用waitstatus_to_exitcode()来将退出状态转换为退出码。
3.5版更變:如果系统调用被中断,但信号处理程序没有触发异常,此函数现在会重试系统调用,而不是触发InterruptedError异常(原因详见PEP475)。
os.wait3(options)¶
与waitpid()相似,差别在于没有进程ID参数,且返回一个3元组,其中包括子进程ID,退出状态指示和资源使用信息。
关于资源使用信息的详情,请参考resource.getrusage()。
option参数与传入waitpid()和wait4()的相同。
可以使用waitstatus_to_exitcode()来将退出状态转换为退出码。
適用:Unix。
os.wait4(pid,options)¶
与waitpid()相似,差别在本方法返回一个3元组,其中包括子进程ID,退出状态指示和资源使用信息。
关于资源使用信息的详情,请参考resource.getrusage()。
wait4()的参数与waitpid()的参数相同。
可以使用waitstatus_to_exitcode()来将退出状态转换为退出码。
適用:Unix。
os.waitstatus_to_exitcode(status)¶
将等待状态转换为退出码。
在Unix上:
如果进程正常退出(当WIFEXITED(status)为真值),则返回进程退出状态(返回WEXITSTATUS(status)):结果值大于等于0。
如果进程被信号终止(当WIFSIGNALED(status)为真值),则返回-signum其中signum为导致进程终止的信号数值(返回-WTERMSIG(status)):结果值小于0。
否则将抛出ValueError异常。
在Windows上,返回status右移8位的结果。
在Unix上,如果进程正被追踪或waitpid()附带WUNTRACED选项被调用,则调用者必须先检查WIFSTOPPED(status)是否为真值。
如果WIFSTOPPED(status)为真值则此函数不可被调用。
也參考
WIFEXITED(),WEXITSTATUS(),WIFSIGNALED(),WTERMSIG(),WIFSTOPPED(),WSTOPSIG()函数。
3.9版新加入.
os.WNOHANG¶
用于waitpid()的选项,如果没有立即可用的子进程状态,则立即返回。
在这种情况下,函数返回(0,0)。
適用:Unix。
os.WCONTINUED¶
被任务控制(jobcontrol)停止的子进程,如果上次报告状态后已恢复运行,则此选项将报告这些子进程。
適用:部分Unix系統。
os.WUNTRACED¶
已停止的子进程,如果自停止以来尚未报告其当前状态,则此选项将报告这些子进程。
適用:Unix。
下列函数采用进程状态码作为参数,状态码由system()、wait()或waitpid()返回。
它们可用于确定进程上发生的操作。
os.WCOREDUMP(status)¶
如果为该进程生成了核心转储,返回True,否则返回False。
此函数应当仅在WIFSIGNALED()为真值时使用。
適用:Unix。
os.WIFCONTINUED(status)¶
如果一个已停止的子进程通过传送SIGCONT获得恢复(如果该进程是从任务控制停止后再继续的)则返回True,否则返回False。
參閱WCONTINUED選項。
適用:Unix。
os.WIFSTOPPED(status)¶
如果进程是通过传送一个信号来停止的则返回True,否则返回False。
WIFSTOPPED()只有在当waitpid()调用是通过使用WUNTRACED选项来完成或者当该进程正被追踪时(参见ptrace(2))才返回True。
適用:Unix。
os.WIFSIGNALED(status)¶
如果进程是通过一个信号来终止的则返回True,否则返回False。
適用:Unix。
os.WIFEXITED(status)¶
如果进程正常终止退出则返回True,也就是说通过调用exit()或_exit(),或者通过从main()返回;在其他情况下则返回False。
適用:Unix。
os.WEXITSTATUS(status)¶
返回进程退出状态。
此函数应当仅在WIFEXITED()为真值时使用。
適用:Unix。
os.WSTOPSIG(status)¶
返回导致进程停止的信号。
此函数应当仅在WIFSTOPPED()为真值时使用。
適用:Unix。
os.WTERMSIG(status)¶
返回导致进程终止的信号的编号。
此函数应当仅在WIFSIGNALED()为真值时使用。
適用:Unix。
调度器接口¶
这些函数控制操作系统如何为进程分配CPU时间。
它们仅在某些Unix平台上可用。
更多细节信息请查阅你所用Unix的指南页面。
3.3版新加入.
以下调度策略如果被操作系统支持就会对外公开。
os.SCHED_OTHER¶
默认调度策略。
os.SCHED_BATCH¶
用于CPU密集型进程的调度策略,它会尽量为计算机中的其余任务保留交互性。
os.SCHED_IDLE¶
用于极低优先级的后台任务的调度策略。
os.SCHED_SPORADIC¶
用于偶发型服务程序的调度策略。
os.SCHED_FIFO¶
先进先出的调度策略。
os.SCHED_RR¶
循环式的调度策略。
os.SCHED_RESET_ON_FORK¶
此旗标可与任何其他调度策略进行OR运算。
当带有此旗标的进程设置分叉时,其子进程的调度策略和优先级会被重置为默认值。
classos.sched_param(sched_priority)¶
这个类表示在sched_setparam(),sched_setscheduler()和sched_getparam()中使用的可修改调度形参。
它属于不可变对象。
目前它只有一个可能的形参:
sched_priority¶
一个调度策略的调度优先级。
os.sched_get_priority_min(policy)¶
获取policy的最低优先级数值。
policy是以上调度策略常量之一。
os.sched_get_priority_max(policy)¶
获取policy的最高优先级数值。
policy是以上调度策略常量之一。
os.sched_setscheduler(pid,policy,param)¶
设置PID为pid的进程的调度策略。
pid为0指的是调用本方法的进程。
policy是以上调度策略常量之一。
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上。
mask是整数的可迭代对象,表示应将进程限制在其中的一组CPU。
os.sched_getaffinity(pid)¶
返回PID为pid的进程(为零则为当前进程)被限制到的那一组CPU。
其他系统信息¶
os.confstr(name)¶
返回字符串格式的系统配置信息。
name指定要查找的配置名称,它可以是字符串,是一个系统已定义的名称,这些名称定义在不同标准(POSIX,Unix95,Unix98等)中。
一些平台还定义了额外的其他名称。
当前操作系统已定义的名称在confstr_names字典的键中给出。
对于未包含在该映射中的配置名称,也可以传递一个整数作为name。
如果name指定的配置值未定义,返回None。
如果name是一个字符串且不是已定义的名称,将抛出ValueError异常。
如果当前系统不支持name指定的配置名称,即使该名称存在于confstr_names,也会抛出OSError异常,错误码为errno.EINVAL。
適用:Unix。
os.confstr_names¶
字典,表示映射关系,为confstr()可接受名称与操作系统为这些名称定义的整数值之间的映射。
这可用于判断系统已定义了哪些名称。
適用:Unix。
os.cpu_count()¶
返回系统的CPU数量。
不确定则返回None。
该数量不同于当前进程可以使用的CPU数量。
可用的CPU数量可以由len(os.sched_getaffinity(0))方法获得。
3.4版新加入.
os.getloadavg()¶
返回系统运行队列中最近1、5和15分钟内的平均进程数。
无法获得平均负载则抛出OSError异常。
適用:Unix。
os.sysconf(name)¶
返回整数格式的系统配置信息。
如果name指定的配置值未定义,返回-1。
对confstr()的name参数的注释在此处也适用。
当前已知的配置名称在sysconf_names字典中提供。
適用:Unix。
os.sysconf_names¶
字典,表示映射关系,为sysconf()可接受名称与操作系统为这些名称定义的整数值之间的映射。
这可用于判断系统已定义了哪些名称。
適用:Unix。
以下数据值用于支持对路径本身的操作。
所有平台都有定义。
对路径的高级操作在os.path模块中定义。
os.curdir¶
操作系统用来表示当前目录的常量字符串。
在Windows和POSIX上是'.'。
在os.path中也可用。
os.pardir¶
操作系统用来表示父目录的常量字符串。
在Windows和POSIX上是'..'。
在os.path中也可用。
os.sep¶
操作系统用来分隔路径不同部分的字符。
在POSIX上是'/',在Windows上是是'\\'。
注意,仅了解它不足以能解析或连接路径,请使用os.path.split()和os.path.join(),但它有时是有用的。
在os.path中也可用。
os.altsep¶
操作系统用来分隔路径不同部分的替代字符。
如果仅存在一个分隔符,则为None。
在sep是反斜杠的Windows系统上,该值被设为'/'。
在os.path中也可用。
os.extsep¶
分隔基本文件名与扩展名的字符,如os.py中的'.'。
在os.path中也可用。
os.pathsep¶
操作系统通常用于分隔搜索路径(如PATH)中不同部分的字符,如POSIX上是':',Windows上是';'。
在os.path中也可用。
os.defpath¶
在环境变量没有'PATH'键的情况下,exec*p*andspawn*p*使用的默认搜索路径。
在os.path中也可用。
os.linesep¶
当前平台用于分隔(或终止)行的字符串。
它可以是单个字符,如POSIX上是'\n',也可以是多个字符,如Windows上是'\r\n'。
在写入以文本模式(默认模式)打开的文件时,请不要使用os.linesep作为行终止符,请在所有平台上都使用一个'\n'代替。
os.devnull¶
空设备的文件路径。
如POSIX上为'/dev/null',Windows上为'nul'。
在os.path中也可用。
os.RTLD_LAZY¶
os.RTLD_NOW¶
os.RTLD_GLOBAL¶
os.RTLD_LOCAL¶
os.RTLD_NODELETE¶
os.RTLD_NOLOAD¶
os.RTLD_DEEPBIND¶
setdlopenflags()和getdlopenflags()函数所使用的标志。
请参阅Unix手册页dlopen(3)获取不同标志的含义。
3.3版新加入.
随机数¶
os.getrandom(size,flags=0)¶
获得最多为size的随机字节。
本函数返回的字节数可能少于请求的字节数。
这些字节可用于为用户空间的随机数生成器提供种子,或用于加密目的。
getrandom()依赖于从设备驱动程序和其他环境噪声源收集的熵。
不必要地读取大量数据将对使用/dev/random和/dev/urandom设备的其他用户产生负面影响。
flags参数是一个位掩码,可以是零个或多个下列值以或运算组合:os.GRND_RANDOM和GRND_NONBLOCK。
另请参阅Linuxgetrandom()手册页。
適用:Linux3.17以上。
3.6版新加入.
os.urandom(size)¶
Returnabytestringofsizerandombytessuitableforcryptographicuse.
本函数从系统指定的随机源获取随机字节。
对于加密应用程序,返回的数据应有足够的不可预测性,尽管其确切的品质取决于操作系统的实现。
在Linux上,如果getrandom()系统调用可用,它将以阻塞模式使用:阻塞直到系统的urandom熵池初始化完毕(内核收集了128位熵)。
原理请参阅PEP524。
在Linux上,getrandom()可以以非阻塞模式(使用GRND_NONBLOCK标志)获取随机字节,或者轮询直到系统的urandom熵池初始化完毕。
在类Unix系统上,随机字节是从/dev/urandom设备读取的。
如果/dev/urandom设备不可用或不可读,则抛出NotImplementedError异常。
在Windows上将使用CryptGenRandom()。
也參考
secrets模块提供了更高级的功能。
所在平台会提供随机数生成器,有关其易于使用的接口,请参阅random.SystemRandom。
3.6.0版更變:在Linux上,getrandom()现在以阻塞模式使用,以提高安全性。
3.5.2版更變:在Linux上,如果getrandom()系统调用阻塞(urandom熵池尚未初始化完毕),则退回一步读取/dev/urandom。
3.5版更變:在Linux3.17和更高版本上,现在使用getrandom()系统调用(如果可用)。
在OpenBSD5.6和更高版本上,现在使用getentropy()C函数。
这些函数避免了使用内部文件描述符。
os.GRND_NONBLOCK¶
默认情况下,从/dev/random读取时,如果没有可用的随机字节,则getrandom()会阻塞;从/dev/urandom读取时,如果熵池尚未初始化,则会阻塞。
如果设置了GRND_NONBLOCK标志,则这些情况下getrandom()不会阻塞,而是立即抛出BlockingIOError异常。
3.6版新加入.
os.GRND_RANDOM¶
如果设置了此标志位,那么将从/dev/random池而不是/dev/urandom池中提取随机字节。
3.6版新加入.
目录
os---多种操作系统接口
文件名,命令行参数,以及环境变量。
PythonUTF-8模式
进程参数
创建文件对象
文件描述符操作
查询终端的尺寸
文件描述符的继承
文件和目录
Linux扩展属性
进程管理
调度器接口
其他系统信息
随机数
上個主題
通用作業系統服務
下個主題
io---处理流的核心工具
本頁
回報錯誤
顯示原始碼
瀏覽
索引
模組|
下一頁|
上一頁|
Python»
3.10.4Documentation»
Python標準函式庫(StandardLibrary)»
通用作業系統服務»
os---多种操作系统接口
|
"
延伸文章資訊
- 1os --- 多种操作系统接口— Python 3.10.4 說明文件
在Python 中,使用字符串类型表示文件名、命令行参数和环境变量。 ... 直接调用 putenv() 并不会影响 os.environ ,所以推荐直接修改 os.environ 。
- 2os.environ模块环境变量详解 - CSDN博客
1、os.environ() 详解. 在python 中通过os.environ 可以获取有关系统的各种信息. 1.1 简介. 通过os.environ 获取环境变量,什么是环境变量呢?
- 3在Python 中設定和獲取環境變數 - Delft Stack
pythonCopy import os os.environ["My Environment"] = "The Best Environment" print("Environment Var...
- 4How do I access environment variables in Python? - Stack ...
Environment variables are accessed through os.environ import os print(os.environ['HOME']). Or you...
- 5os — Miscellaneous operating system interfaces — Python ...
In Python, file names, command line arguments, and environment variables are represented using th...