其他操作系统接口 – 通用操作系统服务(Python教程)(参考资料)
os– 其他操作系统接口¶
源代码: Lib / os.py
此模块提供了一种使用操作系统相关功能的便携方式。如果您只想读取或写入文件,请参阅open(),若要操作路径,请参阅os.path模块,如果要读取命令行中所有文件中的所有行看到fileinput模块。有关创建临时文件和目录的信息,请参阅tempfile模块,对于高级文件和目录处理,请参阅shutilmodule.
注意这些函数的可用性:
- 所有内置操作系统相关的Python模块的设计都是这样的,只要相同的功能可用,它就会使用相同的接口;例如,函数
os.stat(path)以相同的格式(恰好源自POSIX接口)返回有关path的状态信息. - 特定操作系统特有的扩展也是通过
os模块,但使用它们当然是对可移植性的威胁. - 所有接受路径或文件名的函数都接受字节和stringobjects,并且如果返回路径或文件名,则会产生相同类型的对象.
- exception
os.error - 内置的别名
OSErrorexception.
os.name- 导入的操作系统相关模块的名称。目前已注册以下名称:
"posix","nt","java".另见
sys.platform具有更精细的粒度。os.uname()给系统依赖的版本信息.platform模块提供了对系统身份的详细检查.
文件名,命令行参数和环境变量¶
在Python中,使用字符串类型表示文件名,命令行参数和环境变量。在某些系统上,在将这些字符串传递给操作系统之前,必须将这些字符串解码为字节。Python使用文件系统编码来执行此转换(请参阅sys.getfilesystemencoding()).
在版本3.1中更改:在某些系统上,使用文件系统编码进行的转换可能会失败。在这种情况下,Python使用 surrogateescape编码错误处理程序,这意味着在解码时uncodable字节被一个字符U + DCxx替换,并且这些字节在编码时再次转换为原始字节。
文件系统编码必须保证成功解码128以下的所有字节。如果文件系统编码无法提供此保证,API函数可能会引发UnicodeErrors.
Process参数¶
这些功能和数据项提供信息并对当前进程和用户进行操作.
os.ctermid( )- 返回与进程控制终端对应的文件名.
os.environ- A 映射对象代表字符串环境。例如,
environ["HOME"]是你的主目录的路径名(在某些平台上),相当于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()中删除某个项目时,os.environ会被自动调用,当pop()或clear()方法叫做
os.environb- @的字节版
environ: 一个 映射将环境表示为字节字符串的对象。environ和environb同步(修改environb更新environ,反之亦然).environb仅适用于supports_bytes_environ是真的。版本3.2.
os.fsencode(filename)- 用错误处理程序或 filename onWindows编译
"surrogateescape"路径"strict"到filesystemencoding返回bytes不变.fsdecode()是反向功能.新版本3.2.
版本3.6更改:添加支持以接受实现
os.PathLike接口。
os.fsdecode(filename)- 解码路径样 filename来自thefilesystem编码与
"surrogateescape"Windows上的错误处理程序或"strict";返回str不变.fsencode()是反向功能.新版本3.2.
更改版本3.6:支持添加接受实现
os.PathLikeinterface的对象
os.fspath(path)- 返回路径的文件系统表示
如果
str或bytes传入,它返回不变。否则__fspath__()被调用,只要它是一个str或bytes对象,它的值就会返回。在所有其他情况下,TypeError被抬起新版本3.6.
- class
os.PathLike - 对于表示文件系统路径的对象,抽象基类,例如。
pathlib.PurePath.新版本3.6.
- abstractmethod
__fspath__() - 返回对象的文件系统路径表示.
该方法只返回一个
str或bytes对象,首选为str.
- abstractmethod
os.getenv(key, default=None)- 返回环境变量key的值(如果存在),如果不存在则返回default。key, default结果是str.
在Unix上,键和值用
sys.getfilesystemencoding()和"surrogateescape"错误处理程序解码。使用os.getenvb()如果你想使用不同的编码.Availability:大多数版本的Unix,Windows。
os.getenvb(key, default=None)- 返回环境变量key的值(如果存在),如果不存在则返回default。key, default结果是bytes.
getenvb()只有在supports_bytes_environ为真时才可用.Availability:大多数Unix版本。
版本3.2.
os.get_exec_path(env=None)- 中的新内容返回将搜索namedexecutable的目录列表,类似于shell,启动一个进程env,当指定时,应该是一个环境变量字典来查找PATH in.By默认,当env是
None,environ使用.新版本3.2.
os.getegid()- 返回当前进程的有效组ID。这对应于当前进程中正在执行的文件的“set id”位.
Availability:Unix .
os.geteuid()-
返回当前进程的有效用户id.
Availability:Unix .
os.getgid()-
返回真正的组ID当前的过程.
Availability:Unix .
os.getgrouplist(user, group)- 返回user所属的组ID的列表。如果group不在列表中,则包括在内;通常,group被指定为user.
密码记录中的组ID字段////可用性:Unix .
3.3版本中的新功能
os.getgroups()- 返回与当前进程相关的补充组ID列表.
可用性:Unix .
注意
在Mac OS X上,
getgroups()行为与其他Unix平台有所不同。如果Python解释器是使用10.5或更早的部署目标构建的,则getgroups()返回与当前用户进程关联的有效组ID列表;此列表仅限于系统定义的条目数,通常为16,如果具有适当的特权,可以通过调用setgroups()进行修改。如果使用部署目标大于10.5,getgroups()返回当前组访问列表,用于与进程的有效用户ID相关联;组访问列表可能会在进程的生命周期内发生变化,它不会受到setgroups()的影响,其长度不限于16.部署目标值MACOSX_DEPLOYMENT_TARGET可以获得sysconfig.get_config_var().
os.getlogin()- 返回登录进程控制终端的用户名。在大多数情况下,使用
getpass.getuser()更有用,因为后者检查环境变量LOGNAME或USERNAME以找出用户是谁,然后返回到pwd.getpwuid(os.getuid())[0]获取当前真实用户id的登录名.Availability:Unix,Windows .
os.getpgid(pid)- 使用进程ID pid。如果pid为0,则返回当前进程的进程组id .
Availability:Unix .
os.getpgrp()-
返回当前进程组的id .
Availability:Unix .
os.getpid()-
返回当前进程id.
os.getppid()-
返回父进程的id。当父进程退出时,在Unix上返回的id是init进程(1)之一,在Windows上它仍然是相同的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的用户标识符)进行解释。who表示(分别)调用进程,调用进程的进程组或调用进程的真实用户ID .Availability:Unix .
新的版本3.3.
os.PRIO_PROCESSos.PRIO_PGRPos.PRIO_USER- 的参数
getpriority()和setpriority()功能。可用性:Unix .
3.3版本中的新功能
os.getresuid()- 返回一个元组(ruid,euid,suid),表示当前进程的真实,有效和已保存的用户ID .
Availability:Unix .
新版本3.2.
os.getresgid()- 返回一个元组(rgid,egid,sgid),表示当前进程的真实,有效和已保存的组ID .
Availability:Unix .
新版本3.2.
os.getuid()-
返回当前进程的真实用户id.
Availability:Unix .
os.initgroups(username, gid)- 调用系统initgroups()来初始化组访问列表,其中包含指定用户名所属的所有组,以及指定的组id.
可用性:Unix .
版本3.2.
os.putenv(key, value)-
将名为key的环境变量设置为字符串value。这种对环境的改变会影响从
os.system(),popen()或fork()开始的子进程和execv().可用性:大多数版本的Unix,Windows.
注意
在某些平台上,包括FreeBSD和Mac OS X,设置
environ可能导致内存泄漏。请参阅putenv.的系统文档。当支持
putenv()时,os.environ区域中项目的赋值自动转换为putenv()的相应调用;但是,putenv()的调用不会更新os.environ,所以最好分配给os.environ.
os.setegid(egid)- 的项目设置当前进程的有效组ID.
Availability:Unix .
os.seteuid(euid)- 设置当前进程的有效用户id.
Availability:Unix .
os.setgid(gid)- 设置当前进程的组ID .
可用性:Unix.
os.setgroups(groups)- 将与当前进程关联的补充组ID列表设置为groups. groups中的新内容必须是序列,并且每个元素必须是标识组的整数。此操作通常仅供超级用户使用.
可用性:Unix.
注意
在Mac OS X上,groups的长度不得超过系统定义的最大有效组ID数,通常为16.请参阅文档
getgroups()如果它可能不会通过调用setgroups()。
os.setpgrp//()- 调用系统调用
setpgrp()或setpgrp(0, 0)取决于实现的版本(如果有的话)。请参阅Unix手册中的语义.Availability:Unix .
os.setpgid(pid, pgrp)- 来电系统调用
setpgid()将具有id pid的进程的进程组id设置为id为pgrp的进程组。请参阅Unix手册中的语义.Availability: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;优先级较低会导致更有利的调度.Availability:Unix.
3.3版本中的新功能.
os.setregid(rgid, egid)- 设置当前进程真实有效的组ID .
Availability:Unix .
os.setresgid(rgid, egid, sgid)- 设置当前进程的真实,有效,并保存组ids.
Availability:Unix .
版本3.2.
os.setresuid(ruid, euid, suid)- 设置当前进程的真实,有效和已保存的用户ID .
可用性:Unix .
版本3.2.
os.setreuid(ruid, euid)- 设置当前进程的真实有效用户ID
可用性:Unix .
os.getsid(pid)- 来电系统调用
getsid()。请参阅Unix手册了解语义.Availability:Unix .
os.setsid()- 拨打系统电话
setsid()。请参阅Unix手册中的语义.Availability:Unix .
os.setuid(uid)-
设置当前进程的用户ID。
可用性:Unix .
os.strerror(code)- 返回code中错误代码对应的错误信息。在
strerror()返回的平台上NULL当给出一个不知情的号码时,ValueError被抬起来
os.supports_bytes_environTrue如果环境的本机操作系统类型是字节(例如FalseonWindows).版本3.2.
os.umask(mask)- 设置当前数字umask并返回上一个umask.
os.uname( )-
返回标识当前操作系统的信息。返回值是一个具有五个属性的对象:
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().开头的子进程。当支持
unsetenv()时,删除os.environ自动翻译成对unsetenv()的相应调用;但是,unsetenv()的调用不会更新os.environ,所以最好删除os.environ.的可用项:大多数Unix,Windows.
文件描述符操作
这些函数对使用文件描述符引用的I / O流进行操作.
文件描述符是与当前进程打开的文件对应的小整数。例如,标准输入通常是文件描述符0,标准输出是1,标准错误是2.然后,进程打开的其他文件将分配3,4,5等。名称“文件描述符”略有欺骗性;在Unix平台上,套接字和管道也被文件描述符引用.
fileno()方法可用于获取描述与文件对象在需要的时候。请注意,直接使用filedescriptor将绕过文件对象方法,忽略数据的内部缓冲等方面.
os.close(fd)- 关闭文件描述符fd.
注意
此函数用于低级I / O,必须应用于
os.open()或pipe()返回的文件描述符。要关闭内置函数open()或popen()或fdopen()返回的“文件对象”,请使用其close()方法
os.closerange//(fd_low, fd_high)- 关闭fd_low(包含)到fd_high(不包括)的所有文件描述符,忽略错误。相当于(但快得多):
for fd in range(fd_low, fd_high): try: os.close(fd) except OSError: pass
os.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()的可能值,请参阅thedocs mode。从Python 3.3开始,这相当于os.chmod(fd, mode).
os.fchown(fd, uid, gid)- 更改所有者和组ID由fd给出的数字uid和gid。要保持其中一个ID不变,请将其设置为-1。看到
chown()。从Python 3.3开始,这相当于os.chown(fd, uid,gid).
os.fpathconf(fd, name)- 返回与打开文件相关的系统配置信息。name指定要检索的配置值;它可以是一个字符串,它是一个已定义系统值的名称;这些名称在许多标准(POSIX.1,Unix 95,Unix 98和其他标准)中指定。一些平台也定义了附加名称。主机操作系统已知的名称在
pathconf_names字典中给出。对于那个映射中没有包含的配置变量,也可以接受为name传递一个整数.如果name是一个字符串而且不知道,
ValueError是提高。如果主机系统不支持name的特定值,即使它包含在pathconf_names中,对于错误号也会引发OSError和errno.EINVAL.从Python 3.3开始,这相当于
os.pathconf(fd, name).可用性:Unix .
os.fstatvfs(fd)- 返回有关包含与文件描述符fd关联的文件的文件系统的信息,如
statvfs()。从Python 3.3开始,这相当于os.statvfs(fd).可用性:Unix.
os.fsync(fd)- 用filedescriptor强制写入文件fd到磁盘。在Unix上,这调用了
fsync()函数;在Windows上,MS_commit()功能如果你是从一个缓冲的Python 文件对象 f开始,先做
f.flush(),然后执行os.fsync(f.fileno()),以确保与f相关的所有内部缓冲区都写入磁盘.Availability: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)- 返回
True如果文件描述符fd打开并连接到atty(-like)设备,否则False.
os.lockf(fd, cmd, len)- 应用,测试或删除POSIX锁一个打开的文件描述符.fd是一个打开的文件描述符.cmd指定要使用的命令 –
F_LOCK,F_TLOCK,F_ULOCK或F_TEST.len之一指定文件的一部分锁定Availability:Unix.
3.3版本中的新文件
os.F_LOCKos.F_TLOCKos.F_ULOCKos.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_SETos.SEEK_CURos.SEEK_END- 参数到
lseek()功能它们的值分别为0,1和2.版本3.3中的新内容:有些操作系统可以支持其他值,比如
os.SEEK_HOLE或os.SEEK_DATA.
os.open(path, flags, mode=0o777, *, dir_fd=None)- 打开文件path并设置各种标志根据flags来mode。在计算mode时,首先屏蔽当前的umask值。返回新打开文件的文件描述符。新文件描述符是不可继承.
有关标志和模式值的说明,请参阅C运行时文档;标志常量(如
O_RDONLY和O_WRONLY)在os模块中定义。特别是在Windows上添加O_BINARY需要以二进制模式打开文件.这个函数可以支持路径相对于目录描述符和dir_fd参数
在版本3.4中更改:新的文件描述符现在不可用了
注意
此功能适用于低级I / O.正常使用时,请使用内置功能
open(),返回文件对象用read()和write()方法(以及更多)。在文件对象中拖拽文件描述符,使用fdopen().版本3.3中新增: dir_fd参数
更改版本3.5:如果系统调用中断并且信号处理程序没有引发异常,则该函数现在重试系统调用而不是引发
InterruptedError异常(参见 PEP 475 为理由).版本3.6更改:接受路径对象.
以下常量是flags参数open()功能。它们可以使用按位OR运算符|组合。其中一些并非在所有平台上都可用。有关其可用性和使用的说明,请参阅open(2)Unix上的手册页或Windows上的MSDN .
os.O_RDONLYos.O_WRONLYos.O_RDWRos.O_APPENDos.O_CREATos.O_EXCLos.O_TRUNC- 以上常量可在Unix和Windows上使用.
os.O_DSYNCos.O_RSYNCos.O_SYNCos.O_NDELAYos.O_NONBLOCKos.O_NOCTTYos.O_CLOEXEC- 以上常量仅适用于Unix.
改版3.3:添加
O_CLOEXEC常量
os.O_BINARYos.O_NOINHERITos.O_SHORT_LIVEDos.O_TEMPORARYos.O_RANDOMos.O_SEQUENTIALos.O_TEXT- 上述常数仅适用于Windows.
os.O_ASYNCos.O_DIRECTos.O_DIRECTORYos.O_NOFOLLOWos.O_NOATIMEos.O_PATHos.O_TMPFILEos.O_SHLOCKos.O_EXLOCK- 上述常量是扩展名,如果没有C库定义则不存在.
更改版本3.4:在支持它的系统上添加
O_PATH。添加O_TMPFILE,仅适用于Linux内核3.11或更新.
os.openpty( )-
打开一个新的伪终端对。返回一对文件描述符
(master, slave)分别为pty和tty。新的文件描述符不可继承。对于(稍微)更便携的方法,使用ptymodule.Availability:Unix的一些风格
更改版本3.4:新文件描述符现在不可用了
os.pipe()- 创建一个管道。返回一对文件描述符
(r, w)分别可用于阅读和写作。新文件描述符是不可继承.可用性:Unix,Windows.
在版本3.4:新的文件描述符现在是不可加入的
os.pipe2(flags)- 用原子设置flags创建一个管子flags可以通过将这些值中的一个或多个与OR一起构造:
O_NONBLOCK,O_CLOEXEC。返回一对文件描述符(r, w)分别可用于读写.可用性:某些版本的Unix.
新版本3.3.
os.posix_fallocate(fd, offset, len)- 确保为fd指定的文件分配足够的磁盘空间,从offset开始并继续len bytes.
Availability:Unix.
新版本3.3.
os.posix_fadvise(fd, offset, len, advice)- 宣布打算以特定模式访问数据,从而允许内核进行优化。建议适用于fd指定的文件区域,从offset继续len bytes.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_NORMALos.POSIX_FADV_SEQUENTIALos.POSIX_FADV_RANDOMos.POSIX_FADV_NOREUSEos.POSIX_FADV_WILLNEEDos.POSIX_FADV_DONTNEED- 可以在advice
posix_fadvise()指定可能使用的访问模式.Availability:Unix .
新版本3.3.
os.pread(fd, n, offset)- 最多从文件描述符n读取fd在offset的位置,保持文件偏移不变.
返回包含读取的字节的字节串。如果fd已经到达,返回一个空的字节对象.
Availability:Unix .
新版本3.3.
os.preadv(fd, buffers, offset, flags=0)- 从文件描述符fd读取offset的位置变成可变的类似字节的对象 buffers,保持文件偏移不变。将数据传输到每个缓冲区直到它已满,然后移动到序列中的下一个缓冲区以保存其余数据.
flags参数包含零个或多个以下标志的按位OR:
RWF_HIPRIRWF_NOWAIT
返回实际读取的总字节数,该字节数可能小于所有对象的总容量.
操作系统可能设置限制(
sysconf()值"SC_IOV_MAX")关于可以使用的缓冲区数量.结合
os.readv()和os.pread().可用性:Linux 2.6.30及更新版本,FreeBSD 6.0及更新版本,OpenBSD 2.7及更新版本。使用标志需要Linux 4.6或更新版.
新版本3.7.
os.RWF_NOWAIT- 不要等待不能立即获得的数据。如果指定了此标志,则系统调用将立即返回,如果它必须从后备存储读取数据或等待锁定.
如果成功读取了一些数据,它将返回读取的字节数。如果没有读取字节,它将返回
-1并将errno设置为errno.EAGAIN.可用性:Linux4.14和更新.
版本3.7.
os.RWF_HIPRI- 的新功能高优先级读/写。允许基于块的文件系统使用设备轮询,这提供了较低的延迟,但可能使用额外的资源.
目前,在Linux上,此功能仅在使用
O_DIRECTflag.Availability打开的文件描述符上可用:Linux 4.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参数包含零个或多个以下标志的按位OR:
RWF_DSYNCRWF_SYNC
返回实际写入的总字节数.
操作系统可能设置限制(
sysconf()值"SC_IOV_MAX")关于可以使用的缓冲区数量.结合
os.writev()和os.pwrite().可用性:Linux 2.6.30及更新版本,FreeBSD 6.0及更新版本,OpenBSD 2.7及更新版本。使用标志需要Linux 4.7或更高版本.
新版本3.7.
os.RWF_DSYNC- 提供相当于
O_DSYNCopen(2)旗。此标志效果仅适用于系统调用写入的数据范围.Availability:Linux 4.7及更新版
新版本3.7.
os.RWF_SYNC- 提供每写相当于
O_SYNCopen(2)旗。此标志效果仅适用于系统调用写入的数据范围.Availability:Linux 4.7及更新版
新版本3.7.
os.read(fd, n)- 最多阅读n来自文件描述符的字节fd.
返回包含读取字节的字节字符串。如果到达了fd所引用文件的末尾,则返回空字节对象.
注意
此函数用于低级I / O,必须应用于
os.open()或pipe()返回的文件描述符。读取内置函数open()或popen()或fdopen(),或sys.stdin,使用它的read()或readline()methods.更改版本3.5:如果系统调用中断并且信号处理程序没有引发异常,则该函数现在重试系统调用而不是引发
InterruptedError异常(参见 PEP 475 理由).
os.sendfile(out, in, offset, count)os.sendfile(out, in, offset, count, [headers, ] [trailers, ] flags=0)- 从文件描述符count复制in字节到文件描述符out从offset开始。返回发送的字节数。当达到EOF时返回0.
所有定义
sendfile().的平台都支持第一个函数符号。在Linux上,如果offset给出为
None,从in的当前位置读取字节,并更新in的位置.第二种情况可以在Mac OS X和FreeBSD上使用headers和trailers是写入in数据之前和之后写入的任意缓冲区序列。返回与第一种情况相同.
在Mac OS X和FreeBSD上,count的值为0,指定发送到in的结尾为止
所有平台都支持套接字out文件描述符,以及一些平台允许其他类型(例如常规文件,管道).
跨平台应用程序不应该使用headers, trailers和flagsarguments.
可用性:Unix .
注意
对于
sendfile()的更高级别的包装,请参阅socket.socket.sendfile().版本3.3.
os.set_blocking(fd, blocking)- 设置指定文件描述符的阻塞模式。如果阻塞是
O_NONBLOCK,设置False,否则清除旗帜.也可以看看
get_blocking()和socket.socket.setblocking().可用性:Unix .
版本3.5中的新功能
os.SF_NODISKIOos.SF_MNOWAITos.SF_SYNC- 参数
sendfile()功能,实现支持他们.可用性:Unix.
新版本3.3.
os.readv(fd, buffers)- 从文件描述符中读取fd进入一些可变的字节对象 buffers。将数据传输到每个缓冲区,直到它已满,然后移动到序列中的下一个缓冲区以保存数据.
返回实际读取的总字节数,可以小于所有对象的总容量.
操作系统可以设置限制(
sysconf()值"SC_IOV_MAX")关于可以使用的缓冲区数量.可用性:Unix .
3.3版本中的新功能
os.tcgetpgrp(fd)- 返回与fd(由
os.open()返回的openfile描述符.Availability:Unix .
os.tcsetpgrp(fd, pg )- 设置与fd(由
os.open()) 至 pg.可用性: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异常(见 PEP 475 的理由).
os.writev(fd, buffers)- 将buffers的内容写入文件描述符fd. buffers必须是字节对象的序列。缓冲区按数组顺序处理。第一个缓冲区的全部内容在进入第二个缓冲区之前写入,依此类推.
返回实际写入的总字节数.
操作系统可能设置限制(
sysconf()值"SC_IOV_MAX")关于可以使用的缓冲区数量Availability: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 .
- class
os.terminal_size - 元组的子类,持有
(columns, lines)终端窗口尺寸.columns- 终端窗口宽度字符.
lines- 终端窗口高度字符.
文件描述符的继承
版本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 )- 设置指定句柄的“可继承”标志.
Availability:Windows.
文件和目录
在某些Unix平台上,许多这些函数支持以下一个或多个特性:
-
指定文件描述符:对于某些功能,path参数不仅可以是给出路径名的字符串,还可以是文件描述符。然后,该函数将对描述符所提供的文件进行操作。(对于POSIX系统,Python会调用
f...函数的版本。)您可以使用path检查是否可以在平台上指定
os.supports_fd作为文件描述符。如果它不可用,使用它会举起一个NotImplementedError.如果函数也支持dir_fd或follow_symlinks参数,那么在提供path作为文件描述符时指定其中一个是错误的.
-
paths相对于目录描述符:如果dir_fd不是
None,它应该是一个引用目录的文件描述符,而操作的路径应该是相对的;然后路径将相对于该目录。如果路径是绝对的,dir_fd被忽略了。(对于POSIX系统,Python会调用...at或f...at版本的函数。)你可以检查你的平台是否支持dir_fd使用
os.supports_dir_fd。如果它不可用,使用它会引发NotImplementedError.
-
不遵循符号链接:如果follow_symlinks是
False,并且操作路径的最后一个元素on是一个符号链接,该函数将在符号链接本身而不是链接指向的文件上运行。(对于POSIX系统,Python会调用l...版本的函数。)你可以使用follow_symlinks检查你的平台是否支持
os.supports_follow_symlinks。如果它不可用,使用它会引发NotImplementedError.
os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)- 使用真实的uid / gid来测试对path的访问。请注意,大多数操作都将使用有效的uid / gid,因此可以在asuid / sgid环境中使用此例程来测试调用用户是否具有对path. mode的指定访问权限应该是
F_OK来测试path的存在,或者它可以是R_OK,W_OK和X_OK测试权限。返回True如果允许访问,False如果不。参见Unix手册页access(2)欲获得更多信息。此功能可以支持指定相对于directorydescriptors的路径和不遵循符号链接.
如果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()表示它们会被激活,特别是对于网络文件系统上的操作,这些文件系统可能具有超出通常的POSIX权限位模型的权限语句.更改版本3.6:接受路径类对象.
os.F_OKos.R_OKos.W_OKos.X_OK- 值作为mode
access()的参数来测试path的存在性,可读性,可写性和可执行性。
os.chdir(path)-
将当前工作目录更改为path.
此函数可以支持指定文件描述符。该描述符必须引用一个打开的目录,而不是一个打开的文件.
版本3.3:在某些平台上添加了指定path作为文件描述符的支持.
版本3.6更改:接受路径类对象.
os.chflags(path, flags, *, follow_symlinks=True)- 设置标志path到数字flags. flags可以采用以下值的组合(按位OR)(在
stat模块中定义):stat.UF_NODUMPstat.UF_IMMUTABLEstat.UF_APPENDstat.UF_OPAQUEstat.UF_NOUNLINKstat.UF_COMPRESSEDstat.UF_HIDDENstat.SF_ARCHIVEDstat.SF_IMMUTABLEstat.SF_APPENDstat.SF_NOUNLINKstat.SF_SNAPSHOT
这个函数可以支持不遵循符号链接.
新版本3.3: follow_symlinks argument.
更改版本3.6:接受路径类对象.
os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)- 将path的模式更改为数字mode. mode可以采用以下值之一(在
stat模块中定义)或按位ORedcombinations:stat.S_ISUIDstat.S_ISGIDstat.S_ENFMTstat.S_ISVTXstat.S_IREADstat.S_IWRITEstat.S_IEXECstat.S_IRWXUstat.S_IRUSRstat.S_IWUSRstat.S_IXUSRstat.S_IRWXGstat.S_IRGRPstat.S_IWGRPstat.S_IXGRPstat.S_IRWXOstat.S_IROTHstat.S_IWOTHstat.S_IXOTH
这个函数可以支持指定文件描述符,相对于目录描述符的路径和不跟随符号链接.
注意
虽然Windows支持
chmod(),但你只能设置文件的read-only标志(通过stat.S_IWRITE和stat.S_IREAD常量或相应的整数值)。所有其他位都被忽略.新版本3.3:添加了对指定path作为打开文件描述符的支持,以及dir_fd和follow_symlinks arguments.
更改版本3.6:接受类似路径的对象.
os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)- 更改path到数字uid和gid。将其中一个id保持不变,将其设置为-1。
这个函数可以支持指定文件描述符,相对于目录描述符的路径和不跟随符号链接.
请参阅
shutil.chown()以获取更接近数字ids的名称的更高级别的函数.新版本3.3:添加了对path指定打开文件描述符的支持,以及dir_fd和follow_symlinksarguments
改变版本3.6:支持类似路径的对象.
os.fchdir(fd)- 将当前工作目录更改为filedescriptor fd表示的目录。描述符必须引用打开的目录,而不是anopen文件。从Python 3.3开始,这相当于
os.chdir(fd).可用性:Unix.
os.getcwd()- 返回一个表示当前工作目录的字符串.
os.getcwdb()- 返回表示当前工作目录的字节串.
os.lchflags(path, flags)- 将path的标志设置为数字flags,就像
chflags()一样,但不要使用符号链接。从Python 3.3开始,这相当于os.chflags(path, flags, follow_symlinks=False).可用性:Unix.
在版本3.6中更改:接受路径类对象.
os.lchmod(path, mode)- 将path的模式改为数字mode。如果path是符号链接,则会影响符号链接而不是目标。有关
chmod()的可能值,请参阅mode的文档。从Python 3.3开始,这相当于os.chmod(path, mode, follow_symlinks=False).可用性:Unix.
在版本3.6中更改:接受路径类对象.
os.lchown(path, uid, gid)- 将path的所有者和组ID更改为数字uid和gid。此功能不会遵循符号链接。从Python 3.3开始,这相当于
os.chown(path, uid, gid, follow_symlinks=False).可用性:Unix.
在版本3.6中更改:接受路径类对象.
os.link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)- 创建一个指向src的硬链接命名dst.
这个函数可以支持指定src_dir_fd和/或dst_dir_fd tosupply 相对于目录描述符的路径和不跟随符号链接.
可用性:Unix,Windows.
更改版本3.2:添加了Windows支持.
新版本3.3:添加了src_dir_fd, dst_dir_fd,和follow_symlinks参数
在版本3.6中更改:接受路径般的物体for src和dst.
os.listdir(path=”.”)- 返回一个列表,其中包含path给出的目录中的条目名称。该列表是任意顺序,并且不包括specialentries
"."和"..",即使它们存在于目录中.path可能是路径般的对象。如果path是
bytes的类型(直接或间接通过PathLike接口),返回的文件名也将是bytes;在所有其他情况下,它们将是str.这个功能也可以支持指定文件描述符,I / O操作也可能失败;文件描述符必须引用目录.
注意
要编码
str文件名为bytes,使用fsencode().参见
scandir()函数返回目录条目以及文件属性信息,为许多常见用例提供更好的性能.在版本3.2中更改:path参数成为可选的.
版本3.3中的新功能:添加了为path.
版本3.6更改:接受路径类对象.
os.lstat(path, *, dir_fd=None)- 在给定路径上执行相当于
lstat()系统调用。与stat()类似,但不遵循符号链接。返回stat_result对象.在不支持符号链接的平台上,这是
stat().的别名从Python 3.3开始,这相当于
os.stat(path, dir_fd=dir_fd,follow_symlinks=False).这个函数也可以支持相对于目录的路径描述.
另请参阅
stat()功能更改版本3.2:添加了对Windows 6.0(Vista)符号链接的支持.
在版本3.3中更改:添加了dir_fd参数.
在版本3.6中更改:接受路径类对象 src和dst.
os.mkdir(path, mode=0o777, *, dir_fd=None)- 用数字模式path创建一个名为mode.
的目录如果目录已存在,
FileExistsError被抬起来在某些系统中,mode被忽略了。在使用它的地方,首先屏蔽当前的umaskvalue。如果是最后9位以外的位(即的八进制表示的最后3digits)mode)设置,它们的含义取决于平台。在某些平台上,它们会被忽略,你应该调用
chmod()明确地设置它们这个功能还可以支持相对于目录描述符的路径.
也可以创建临时目录;看
tempfile模块tempfile.mkdtemp()功能新版本3.3: dir_fd论点
版本3.6更改:接受路径对象.
os.makedirs(name, mode=0o777, exist_ok=False)-
递归目录创建功能。像
mkdir()一样,但是需要包含叶子目录的所有中间级目录.mode参数传递给
mkdir()以创建叶子目录;看 mkdir()描述是如何解释的。要设置任何新创建的父目录的文件权限位,可以在调用makedirs()之前设置umask。现有父目录的文件权限位不会改变.如果exist_ok是
False(默认值),如果目标目录已存在则引发OSError.注意
makedirs()如果创建的路径元素包含pardir(例如UNIX系统上的“..”)将会混淆.这个函数处理UNC路径正确.
新版本3.2: exist_ok参数
更改版本3.4.1:之前Python 3.4.1,如果exist_ok是
True并且目录存在,makedirs()如果mode与现有目录的明码不匹配。由于这种行为不可能安全地实现,因此在Python 3.4.1中删除了它。见bpo-21082.版本3.6:接受路径对象.
在版本3.7中更改: mode参数不再影响新创建的中级目录的文件权限位.
os.mkfifo(path, mode=0o666, *, dir_fd=None)- 创建一个FIFO(一个名为用数字模式命名path mode。当前的umask值首先从模式中屏蔽掉
这个函数也可以支持路径相对目录描述符.
FIFO是可以像常规文件一样访问的管道。FIFO一直存在,直到它们被删除(例如
os.unlink())。通常,FIFO用作“客户端”和“服务器”类型进程之间的会合:服务器打开FIFO进行读取,客户端打开它进行写入。注意mkfifo()不打开FIFO – 它只是创建了会合点.Availability:Unix .
版本3.3中的新功能: dir_fd论证
更改版本3.6:接受类似路径的对象.
os.mknod(path, mode=0o600, device=0, *, dir_fd=None)- 创建一个名为path. mode的文件系统节点(文件,设备专用文件或命名管道),指定要使用的权限和类型nodeto被创建,与
stat.S_IFREG,stat.S_IFCHR,stat.S_IFBLK和stat.S_IFIFO中的一个组合(按位OR)(这些常量在stat中可用)。对于stat.S_IFCHR和stat.S_IFBLK,device定义新创建的设备专用文件(可能使用os.makedev()),否则将被忽略.此功能也可以支持相对于目录描述符的路径.
可用性:Unix.
新版本3.3: dir_fd参数.
版本3.6:接受一个路径对象.
os.major(device)- 从原始设备号中提取设备主号码(通常是
st_dev的st_rdev或stat字段.
os.minor(device)- 从原始设备编号中提取设备次要编号(通常是
st_dev的st_rdev或stat字段.
os.makedev(major, minor)- 从主设备号和次设备号中编写原始设备号.
os.pathconf(path, name)- 返回与命名文件相关的系统配置信息。name指定要检索的配置值;它可以是一个字符串,它是一个已定义系统值的名称;这些名称在许多标准(POSIX.1,Unix 95,Unix 98和其他标准)中指定。一些平台也定义了附加名称。主机操作系统已知的名称在
pathconf_names字典中给出。对于那个映射中没有包含的配置变量,也可以接受为name传递一个整数.如果name是一个字符串而且不知道,
ValueError是提高。如果主机系统不支持name的特定值,即使它包含在pathconf_names中,对于错误号也会引发OSError和errno.EINVAL.这个函数可以支持指定文件描述符.
可用性:Unix.
更改版本3.6:接受一个路径般的物体.
os.pathconf_names- 接受的字典映射名称
pathconf()和fpathconf()到主机操作系统为这些名称定义的整数值。这可以用来确定系统已知的名称集.Availability:Unix .
os.readlink(path, *, dir_fd=None)- 返回表示符号链接指向的路径的字符串。结果可以是绝对路径名或相对路径名;如果它是相对的,可以使用
os.path.join(os.path.dirname(path), result).如果path是一个字符串对象(直接或间接通过
PathLike接口),结果也将是一个字符串对象,并且该调用可能引发UnicodeDecodeError。如果path是一个bytesobject(直接或间接),结果将是一个bytes对象.这个函数也可以支持路径相对于目录描述符.
可用性:Unix,Windows .
在版本3.2中更改:添加了对Windows 6.0(Vista)符号链接的支持.
版本3.3中的新版本: dir_fd论点
更改版本3.6:接受路径类对象.
os.remove(path, *, dir_fd=None)- 删除(删除)文件path。如果path是一个目录,
OSErrorisraised。使用rmdir()删除目录.这个功能可以支持相对于目录描述符的路径.
在Windows上,尝试删除正在使用的文件会导致引发异常;在Unix上,目录条目被删除但分配给文件的存储在原始文件不再使用之前不可用.
此功能在语义上与
unlink().版本3.3中的新功能:dir_fdargument.
版本3.6更改:接受路径对象.
os.removedirs(name)-
递归删除目录。像
rmdir()一样工作,除非成功删除了theleaf目录,removedirs()尝试连续删除path直到引发错误(被忽略,因为它通常意味着父目录不为空)。例如,os.removedirs("foo/bar/baz")将首先删除目录"foo/bar/baz",然后删除"foo/bar"和"foo"如果他们是空的提高OSError如果叶子目录无法成功删除.版本3.6更改:接受路径对象.
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)- 将文件或目录重命名为src至dst。如果dst是目录,则会引发
OSError。在Unix上,如果dst存在并且是一个文件,如果用户有权限,它将被静默替换。如果src和dst在不同的文件系统上。如果成功,重命名将是原子操作(这是POSIX要求)。OnWindows,如果dst已经存在,OSError即使是文件也会被提升.此函数可以支持指定src_dir_fd和/或dst_dir_fd tosupply 相对于目录描述符的路径.
如果要跨目标覆盖目标,请使用
replace().版本3.3中的新功能: src_dir_fd和dst_dir_fd参数
在版本3.6中更改:接受路径类对象 src和dst.
os.renames(old, new)- 递归目录或文件重命名功能。像
rename(),首先要尝试使新路径名良好所需的任何中间目录的除外。重命名后,使用removedirs().注意
如果你没有删除叶子目录或文件所需的权限,那么这个函数可能会失败,新的目录结构.
在版本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 tosupply path相对于目录描述符.
新版本3.3.
更改版本3.6:接受路径类对象 for src和dst.
os.rmdir(path, *, dir_fd=None)- 删除(删除)目录path。仅在目录为空时才起作用,否则引发
OSError。为了删除wholedirectory树,shutil.rmtree()可以使用.这个函数可以支持相对于目录描述符的路径.
版本3.3中的新功能: dir_fd参数
在版本3.6中更改:接受路径对象.
os.scandir(path=”.”)- 返回对应于
os.DirEntry给出的目录中的条目的path对象的迭代器。条目是以任意顺序产生的,特殊条目"."和".."不包括在内.使用
scandir()代替listdir()可以显着提高还需要文件类型或文件属性信息的代码的性能,因为如果操作系统在扫描目录时提供了它,os.DirEntry对象会公开此信息。所有os.DirEntry方法都可以执行系统调用,但is_dir()和is_file()通常只需要系统调用符号链接;os.DirEntry.stat()总是需要在Unix上进行系统调用,但在Windows上只需要一个连接符号.path可能是路径类对象。如果path是
bytes的类型(直接或间接通过PathLike接口),name和path属性的类型每个os.DirEntry将是bytes;在所有其他情况下,它们的类型为str.这个函数也可以支持指定文件描述符;文件描述符必须引用目录.
scandir()迭代器支持上下文管理器 protocoland有以下方法:scandir.close()- 关闭迭代器并释放获得的资源.
当迭代器耗尽或垃圾收集时,或者在迭代期间发生错误时,会自动调用此方法。但是建议明确地调用它或使用
withstatement.版本3.6.
以下示例显示了
scandir()显示给定的path不要以"."。entry.is_file()调用通常不会进行额外的系统调用:with os.scandir(path) as it: for entry in it: if not entry.name.startswith(".") and entry.is_file(): print(entry.name)
注意
在基于Unix的系统上,
scandir()使用system’sopendir()和readdir()函数。在Windows上,它使用Win32FindFirstFileWandFindNextFileWfunctions新版本3.5.
新版本3.6:增加了对上下文管理器协议和
close()方法。如果一个scandir()迭代器是neitherexhausted也没有明确关闭ResourceWarning将在它的析构函数中发出.功能接受路径对象.
- class
os.DirEntry - 由
scandir()产生的对象暴露文件路径和目录条目的其他文件属性.scandir()将尽可能多地提供这些信息,而不需要进行额外的系统调用。当stat()或lstat()系统调用时,os.DirEntry对象将缓存结果.os.DirEntry实例不打算存储在长期数据结构中;如果你知道文件元数据已经改变,或者自从调用scandir()以来已经很久没事了,请调用os.stat(entry.path)来获取最新信息.因为
os.DirEntry方法可以进行操作系统调用,也可以提高OSError。如果你需要对错误进行非常细粒度的控制,你可以在调用其中一个OSError方法时抓住os.DirEntry并适当处理.可以直接用作路径类对象,
os.DirEntry实现PathLike接口//
os.DirEntry实例上的属性和方法如下:name- 条目的基本文件名,相对于
scandir()pathargument.name属性为bytes如果scandir()path参数的类型为bytes和str否则。使用fsdecode()解码字节文件名.
path- 条目的完整路径名:相当于
os.path.join(scandir_path,entry.name)其中scandir_path是scandir()path参数。如果scandir()path参数是绝对的,那么路径是绝对的。如果scandir()path参数是文件描述符,则path属性与name属性相同如果
path参数的类型为bytes和scandir()path,则bytes属性为str。用fsdecode()解码字节文件名.
inode()- 返回条目的inode编号.
结果是缓存的在
os.DirEntry对象上。使用os.stat(entry.path, follow_symlinks=False).st_ino获取up-to -dateinformation.
is_dir(*, follow_symlinks=True)- 如果此条目是指向目录的目录或符号链接,则返回
True;返回False如果条目是或指向任何其他文件,或者它不再存在.如果follow_symlinks是
False,则返回True只有这个条目是一个目录(没有下面的符号链接);返回False如果该条目是任何其他类型的文件或它不再存在.结果缓存在
os.DirEntry对象上,带有一个单独的缓存follow_symlinksTrue和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都不需要系统调用,除了一旦返回
dirent.d_type == DT_UNKNOWN.的Unix文件系统,如网络文件系统,这个方法可以引发
OSError,比如PermissionError,但FileNotFoundError被捕获而不是举起来
stat(*, follow_symlinks=True)- 回复
stat_result对象。此方法默认使用符号链接;stat一个符号链接添加follow_symlinks=False参数在Unix上,此方法始终需要系统调用。在Windows上,如果follow_symlinks是
True并且条件是符号链接,则只需要系统调用.在Windows上,
st_ino,st_dev和st_nlinkstat_result的属性始终设置为零。调用os.stat()来调用这些属性.结果缓存在
os.DirEntry对象上,并带有follow_symlinksTrue和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可以指定一个字符串或字节 – 直接或间接通过PathLikeinterface – 或者作为一个打开的文件描述符。返回stat_resultobject.这个函数通常遵循符号链接;to stat a symlink添加参数
follow_symlinks=False,或者使用lstat().这个函数可以支持指定文件描述符和 not以下符号链接.
示例:
>>> 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.6中更改:接受path-like object .
- class
os.stat_result - 其属性大致对应于
stat结构的成员的对象。它用于os.stat(),os.fstat()和os.lstat().的结果属性:
st_mode- 文件模式:文件类型和文件模式位(权限).
st_dev- 该文件所在设备的标识符.
st_nlink- 硬链接数.
st_uid- 文件所有者的用户标识符.
st_gid- 文件所有者的组标识符.
st_size- 文件大小(以字节为单位),如果是常规文件或符号链接。符号链接的大小是它包含的路径名的长度,没有终止空字节.
Timestamps:
st_atime- 最近一次访问的时间以秒表示.
st_mtime- 最近内容修改的时间以秒表示.
st_atime_ns- 最近一次访问的时间以纳秒表示为整数.
st_mtime_ns- 最近内容修改的时间以纳秒为单位表示
注意
st_atime,st_mtime的确切含义和分辨率,和st_ctime属性取决于操作系统和文件系统。例如,在使用FATor FAT32文件系统的Windows系统上,st_mtime具有2秒的分辨率,而st_atime只有1天的分辨率。有关详细信息,请参阅操作系统文档.同样,虽然
st_atime_ns,st_mtime_ns和st_ctime_ns总是以纳秒表示,但manysystems不提供纳秒精度。在具有纳秒级精度的系统上,使用的浮点对象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- \”Preferred“blocksize有效的文件系统I / O.写入文件较小的块可能导致低效read-modify-rewrite.
st_rdev- 设备类型如果是inode设备.
st_flags- 用户自定义标志for file.
在其他Unix系统(例如FreeBSD)上,可以使用以下属性(但只有在root尝试使用它们时才可填写):
st_gen- 文件生成号.
st_birthtime- 文件创建时间.
在Solaris和衍生产品上,还可以使用以下属性:
st_fstype- 唯一标识包含文件的文件系统类型的字符串.
在Mac OS系统上,也可以使用以下属性:
st_rsize- 文件的实际大小.
st_creator- 文件的文件.
st_type- 文件类型.
在Windows系统上,还可以使用以下属性:
st_file_attributes- Windows文件属性:
dwFileAttributesBY_HANDLE_FILE_INFORMATION返回的GetFileInformationByHandle()结构的成员。请参阅FILE_ATTRIBUTE_*模块中的stat常量
标准模块
stat定义了用于从stat结构中提取信息的函数和常量。(OnWindows,有些项目填充了虚拟值。)为了向后兼容,
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_nsmembers.版本3.5中的新功能:添加了
st_file_attributesWindows上的会员.在版本3.5中更改:Windows现在将文件索引返回为
st_ino有空的时候。版本3.7中的新功能:将
st_fstype成员添加到Solaris /衍生产品.
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属性的bit-flags定义了两个模块级常量:如果设置了ST_RDONLY,则文件系统只能挂载,如果ST_NOSUID如果设置,则setuid / setgid位的语义被禁用或不被支持.为基于GNU / glibc的系统定义了附加的模块级常量。这些是
ST_NODEV(不允许访问设备专用文件)),ST_NOEXEC(禁止程序执行),ST_SYNCHRONOUS(写入一次同步),ST_MANDLOCK(允许强制锁定FS),ST_WRITE(写在文件/目录/符号链接),ST_APPEND(仅附加文件),ST_IMMUTABLE(不可变文件),ST_NOATIME(不更新访问时间),ST_NODIRATIME(不要更新目录访问时间),ST_RELATIME(相对于mtime / ctime更新atime).这个函数可以支持指定文件描述符.
可用性:Unix.
在版本3.2中更改:添加了
ST_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中更改:接受类似路径的对象.
版本3.7中的新内容:添加
f_fsid.
os.supports_dir_fd- 一个
Set对象,指示os模块中的哪些函数允许使用它们的dir_fd参数。不同的平台提供不同的功能,可能在一个平台上工作的选项可能在另一个平台上不受支持。为了保持一致性,支持dir_fd的函数总是允许指定参数,但是如果功能实际上不可用则会引发异常.检查特定函数是否允许使用它的dir_fd参数,在
in上使用supports_dir_fd运算符。例如,该表达式确定dir_fd的os.stat()参数是否在本地可用:os.stat in os.supports_dir_fd
目前dir_fd参数仅适用于Unix平台;它们都没有在Windows上运行.
新版本3.3.
os.supports_effective_ids- A
Set对象表示os模块中的哪些功能允许使用effective_idsos.access()的参数。如果本地平台支持它,收集将包含os.access(),否则它将为空检查是否可以使用effective_ids参数
os.access(),则使用in操作员在supports_effective_ids,像这样:os.access in os.supports_effective_ids
目前effective_ids仅适用于Unix平台;它不适用于Windows.
新版本3.3.
os.supports_fd- A
Set对象表示os模块中的哪些功能允许指定它们path参数作为打开的文件描述符。不同的平台提供不同的功能,可能在一个平台上工作的选项可能在另一个平台上不受支持。forconsistency的sakes,支持fd总是允许指定参数,但如果功能实际上不可用则会引发异常.要检查某个特定函数是否允许为其path参数指定一个打开的文件描述符,请在
in上使用supports_fd运算符。例如,这个表达式确定是否os.chdir()在本地平台上调用时接受打开的文件描述符:os.chdir in os.supports_fd
版本3.3.
os.supports_follow_symlinks- A
Set对象指示os模块中的哪些函数允许使用他们的follow_symlinks参数。Differentplatforms提供不同的功能,可能在另一个上运行的选项可能不受支持。为了保持一致性,支持follow_symlinks的函数总是允许指定参数,但如果功能实际上不可用则会引发异常.检查特定函数是否允许使用它follow_symlinks参数,在
in上使用supports_follow_symlinks运算符。作为示例,此表达式确定follow_symlinks参数os.stat()是否在本地可用:os.stat in os.supports_follow_symlinks
版本3.3.
os.symlink(src, dst, target_is_directory=False, *, dir_fd=None)- 创建指向src命名的符号链接dst.
在Windows上,符号链接表示文件或目录,并且不会动态变形到目标。如果目标存在,则将创建thesymlink的类型以匹配。否则,如果target_is_directory是
True,则符号链接将被创建为目录,否则将创建文件符号链接(默认值)。在非Windows平台上,target_is_directory被忽略.Windows 6.0(Vista)中引入了符号链接支持。
symlink()会在早于6.0的Windows版本上引发NotImplementedError这个功能可以支持相对于目录描述符的路径.
注意
在Windows上,SeCreateSymbolicLinkPrivilege是为了成功创建符号链接所必需的。此特权通常不会授予普通用户,但可用于可以升级管理员级别的特权的帐户。获取权限或以管理员身份运行您的应用程序是成功创建符号链接的方法.
OSError函数被unprivilegeduser调用时引发在版本3.2中更改:添加了对Windows的支持6.0(Vista)符号链接.
版本3.3中的新功能:添加了dir_fd争论,现在允许target_is_directory在非Windows平台上.
版本3.6更改:接受路径对象为src和dst.
os.sync()- 强制将所有内容写入磁盘.
新版本3.3.
os.truncate(path, length)- 截断对应path的文件,最多length大小字节.
这个函数可以支持指定文件描述符.
新的版本3.3.
更改版本3.5:添加了对Windows的支持
在版本3.6中更改:接受路径类对象.
os.unlink(path, *, dir_fd=None)- 删除(删除)文件path。这个函数在语义上与
remove();unlink名称是它的传统Unix名称。有关详细信息,请参阅remove()的文档.3.3版本中的新版本: dir_fd参数.
版本更改3.6:接受类似路径的对象.
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)形式的2元组,其中每个成员都是一个表示秒的int或float - 如果times是
None和ns未指定,这相当于指定ns=(atime_ns, mtime_ns)这两个时间都是当前时间.
为times和ns.
是否可以为path取决于操作系统是否将目录实现为文件(例如,Windows不实现)。请注意,您在此处设置的确切时间可能不会被随后的
stat()调用,取决于操作系统记录访问和修改时间的分辨率;看stat()。保存确切时间的最佳方法是使用st_atime_ns和st_mtime_ns来自os.stat()结果对象与ns参数UTIME .这个功能可以支持指定文件描述符,相对于目录描述符的路径和不遵循符号链接.
版本3.3中的新功能:添加了为path,和dir_fd, follow_symlinks,和nsparameters.
版本3.6更改:接受路径类对象.
- 如果ns如果指定,它必须是
os.walk(top, topdown=True, onerror=None, followlinks=False)-
通过从上到下或从底部走树来生成目录树中的文件名起来。对于以目录top(包括top本身),它产生一个3元组
(dirpath, dirnames,filenames).dirpath是一个字符串,即目录的路径。dirnames是dirpath中子目录的名称列表(不包括
"."和"..").filenames是dirpath中非目录文件的名称列表。请注意列表中的名称不包含路径组件。获取完整路径(以top开头)到dirpath,执行os.path.join(dirpath, name).如果可选参数topdown是
True或未指定,则在其任何子目录的三元组(自上而下生成目录)之前生成adirectory的三元组。如果topdown是False,目录的三元组是在所有子目录的三元组之后生成的(目录是自下而上生成的)。无论topdown,在生成目录及其子目录的元组之前检索子目录列表.当topdown是
True时,调用者可以修改dirnames就地列出(可能使用del或切片赋值),而walk()只会进入名称保留在dirnames;这可以用来修剪搜索,强加一个特定的访问顺序,甚至通知walk()关于调用者在恢复之前创建或重命名的目录walk()再次。修改dirnames当topdown是False对行走的行为没有影响时,因为在自下而上模式中,dirnames中的目录是在生成dirpath之前生成的。默认情况下
scandir()呼叫被忽略。如果指定了optionalargument onerror,它应该是一个函数;它将被调用一个参数,一个OSError实例。它可以报告错误以继续行走,或者引发异常以中止行走。请注意,该文件名可用作异常对象的filename属性.默认情况下,
walk()不会向下走到解析为目录的符号链接。设置followlinks到True访问符号链接指向的目录,在支持它们的系统上.注意
请注意,如果链接指向其自身的父目录,则将followlinks设置为
True会导致无限递归。walk()不跟踪已经访问过的目录.注意
如果你传递一个相对路径名,不要在
walk().walk()的恢复之间改变当前的工作目录,永远不要改变当前目录,并假设它的调用者也没有.此示例显示起始目录下每个目录中的非目录文件占用的字节数,但它不在CVS子目录下查找:
import os from os.path import join, getsize for root, dirs, files in os.walk('python/Lib/email'): print(root, "consumes", end=" ") print(sum(getsize(join(root, name)) for name in files), end=" ") print("bytes in", len(files), "non-directory files") if 'CVS' in dirs: dirs.remove('CVS') # don't visit CVS directories在下一个例子中(
shutil.rmtree()的简单实现),从底部向上走树是必不可少的,rmdir()不允许在目录为空之前删除目录:# Delete everything reachable from the directory named in "top", # assuming there are no symbolic links. # CAUTION: This is dangerous! For example, if top == '/', it # could delete all your disk files. import os for root, dirs, files in os.walk(top, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name))
版本3.6更改:接受路径对象.
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())你想让它们更长久.此示例显示起始目录下每个目录中的非目录文件占用的字节数,但它不在anyCVS子目录下查找:
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()不允许在目录isempty之前删除目录:# 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)
版本3.3.
在版本3.6中更改:接受路径类对象.
在版本3.7中更改:添加了对
bytes路径的支持.
Linux扩展属性¶
版本3.3.
这些功能仅在Linux上可用.
os.getxattr(path, attribute, *, follow_symlinks=True)- 为attribute返回扩展文件系统属性的值path. attribute可以是字节或str(直接或间接通过
PathLike接口)。如果是str,则使用filesystemencoding编码此函数可以支持指定文件描述符和不遵循符号链接.
在版本3.6中更改:接受路径类对象 path和attribute.
os.listxattr(path=None, *, follow_symlinks=True)- 返回扩展文件系统的列表path上的属性。列表中的属性表示为使用filesystemencoding解码的字符串。如果path是
None,listxattr()将检查当前目录.这个函数可以支持指定文件描述符和不遵循符号链接.
更改版本3.6:接受路径类对象.
os.removexattr(path, attribute, *, follow_symlinks=True)- 从attribute中删除扩展文件系统属性path.attribute应为bytes或str(直接或间接通过
PathLike接口)。如果是字符串,则使用文件系统编码进行编码.这个函数可以支持指定文件描述符和不遵循符号链接.
在版本3.6中更改:接受类似路径的对象 path和attribute.
os.setxattr(path, attribute, value, flags=0, *, follow_symlinks=True)- 设置扩展文件系统属性attribute on path to value.attribute必须是一个字节或str没有嵌入的NUL(直接或间接通过
PathLike接口)。如果是str,则使用文件系统编码进行编码。flags可能是XATTR_REPLACE或XATTR_CREATE。如果XATTR_REPLACEisgiven并且该属性不存在,则EEXISTS将被引发。如果给出XATTR_CREATE并且该属性已经存在,则不会创建该属性并且ENODATA将被提升这个函数可以支持指定文件描述符和不遵循符号链接.
注意
Linux内核版本低于2.6.39的错误导致在某些文件系统上忽略flags参数
在版本3.6中更改:接受 path-like object for path和attribute.
os.XATTR_SIZE_MAX- 扩展属性的值的最大大小。目前,这是Linux上的64 KiB
os.XATTR_CREATE- 这是
setxattr()中flags参数的可能值。它表明操作必须创建一个属性.
os.XATTR_REPLACE- 这是
setxattr()中flags参数的可能值。它表示操作必须替换现有属性.
进程管理¶
这些功能可用于创建和管理进程.
各种exec*函数获取加载到进程中的新程序的参数列表。在每种情况下,这些参数中的第一个作为自己的名称被传递给新程序,而不是用户可能在命令行上键入的参数。对于C程序员来说,这就是argv[0]传递到程序的main()。例如,os.execv("/bin/echo",["foo", "bar"])只会在标准输出上打印bar;foo似乎会被忽略.
os.abort()- 发一个
SIGABRT向当前进程发出信号。在Unix上,defaultbehavior是生成核心转储;在Windows上,进程立即返回3。请注意,调用此函数不会调用为SIGABRT注册的@Python信号处理程序signal.signal().
os.execl(path, arg0, arg1, …)os.execle(path, arg0, arg1, …, env)os.execlp(file, arg0, arg1, …)os.execlpe(file, arg0, arg1, …, env)os.execv(path, args)os.execve(path, args, env)os.execvp(file, args)os.execvpe(file, args, env)- 这些函数都执行一个新程序,取代当前进程;他们不回来。在Unix上,新的可执行文件被加载到当前进程中,并且将具有与调用者相同的进程ID。错误将报告为
OSError例外.当前的过程立即被替换。打开的文件对象和描述符没有刷新,所以如果这些打开的文件可能有缓冲数据,你应该用
sys.stdout.flush()要么os.fsync()在打电话给exec*功能。“”的“l”和“v”变种
exec*函数在如何传递命令行参数方面有所不同。如果在编写代码时参数的数量是固定的,那么“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也可以指定为openfile描述符。您的平台可能不支持此功能;您可以使用os.supports_fd。如果它不可用,使用它会提升NotImplementedError.新版本3.3:增加了对指定的支持一个path的开放文件描述符
execve().版本3.6更改:接受路径类对象.
os._exit(n)- 退出进程状态n,没有打电话给清理处理程序,刷新缓冲区等等.
注意
退出的标准方法是
sys.exit(n)._exit()通常只能在fork().
之后的子进程中使用以下退出代码定义并且可以与_exit(),虽然他们不是必需的。这些通常用于Python编写的系统程序,如邮件服务器的外部命令传递程序.
注意
其中一些可能并非在所有Unix平台上都可用,因为存在一些变化。这些常量定义在它们由底层平台定义的位置.
os.EX_OK- 退出代码,表示没有发生错误.
Availability:Unix .
os.EX_USAGE- 退出代码这意味着命令使用不正确,例如当给出错误的参数数量时
//Availability:Unix.
os.EX_DATAERR- 退出代码表示输入数据不正确。
可用性:Unix.
os.EX_NOINPUT- 退出代码,表示输入文件不存在或不可读.
Availability:Unix.
os.EX_NOUSER- 退出代码,表示指定的用户不存在.
Availability:Unix.
os.EX_NOHOST- 退出代码,指的是指定的主机不存在.
可用性:Unix.
os.EX_UNAVAILABLE- 退出代码表示所需服务不可用.
可用性:Unix.
os.EX_SOFTWARE- 退出代码,表示检测到内部软件错误.
Availability:Unix .
os.EX_OSFILE- 退出代码,表示某些系统文件不存在,无法打开,或者有其他类型的错误.
Availability:Unix .
os.EX_CANTCREAT- 退出代码表示无法创建用户指定的输出文件.
Availability:Unix.
os.EX_IOERR- 退出代码,表示执行I / O时发生错误一些文件
Availability:Unix .
os.EX_TEMPFAIL- 退出代码表示发生了临时故障。这表示可能不是真正的错误,例如在可重试操作期间无法进行的网络连接.
可用性:Unix.
os.EX_PROTOCOL- 退出代码,表示协议交换是非法的,无效的或不理解的.
可用性:Unix.
os.EX_NOPERM- 退出代码意味着没有足够的权限来执行操作(但不是用于文件系统问题).
可用性:Unix.
os.EX_CONFIG- 退出代码,表示发生了某种配置错误.
Availability:Unix.
os.EX_NOTFOUND- 退出代码,意思是“找不到条目“.
可用性:Unix .
os.fork()- 小孩过程。在孩子和孩子的过程id中返回
0。如果发生错误OSError被引发注意从一个线程使用fork()时,某些平台包括FreeBSD< = 6.3和Cygwin都有问题.
Warning
对于使用带有fork()的SSL模块的应用程序,请参见
ssl.可用性:Unix .
os.forkpty()- 使用新的伪终端作为孩子的控制终端来分叉子进程。返回一对
(pid, fd),其中pid是0在子节点,新子节点的进程id在父节点中,而fd是主节点的文件描述符伪终端的结束。要获得更便携的方法,请使用pty模块。如果发生错误OSError被抬起可用性:某些版本的Unix.
os.kill(pid, sig)-
发出信号sig进程pid。主机平台上可用的特定信号的常数在
signal模块中定义.Windows:
signal.CTRL_C_EVENT和signal.CTRL_BREAK_EVENT信号是特殊的信号,只能是发送到共享公共控制台窗口的控制台进程,例如,一些子进程。sig的任何其他值都将导致进程被TerminateProcess API无条件地终止,并且退出代码将被设置为sig。kill()的Windows版本还需要处理进程句柄.参见
signal.pthread_kill().版本3.2中的新功能: Windows支持.
os.killpg(pgid, sig)-
将信号sig发送到进程组pgid.
可用性:Unix .
os.nice(increment)- 将increment添加到进程的“niceness”中。返回新的善意.
Availability:Unix .
os.plock(op)- 锁定程序段进入内存。op(在
<sys/lock.h>中定义)的值决定锁定哪些段.Availability:Unix .
os.popen(cmd, mode=”r”, buffering=-1)- 打开或发出命令cmd的管道。返回值是一个连接到管道的打开文件对象,根据是否mode是
"r"可以读取或写入(默认) 要么"w"。buffering参数与内置open()函数的对应参数具有相同的含义。文件对象读取或写入文本字符串而不是字节.close方法返回None如果子进程成功退出,或者子进程的返回代码是否存在错误。在POSIX系统上,如果返回代码为正,则表示左移一个字节的进程的返回值。如果返回码为负,则由返回码的否定值给出的信号终止该过程。(例如,返回值可能是- signal.SIGKILL如果thesubprocess被杀死。)在Windows系统上,返回值包含来自子进程的有符号整数返回码.这是使用
subprocess.Popen;看一下这个类的文档,用于管理和处理子进程的更强大的方法.
os.register_at_fork(*, before=None, after_in_parent=None, after_in_child=None)- 注册新的子进程分叉时执行的callables
os.fork()或类似的进程克隆API。参数是可选的,仅限关键字。每个指定一个不同的调用点.- before是一个在分叉子进程之前调用的函数.
- after_in_parent是父进程调用子进程后调用的函数.
- after_in_child是一个从子进程调用的函数.
只有在期望控制返回到Python解释器时才会进行这些调用。典型的
subprocess发射不会触发它们,因为孩子不会重新进入翻译.在分叉之前注册执行的函数以反向注册顺序调用。登记在分叉后执行的功能(在父母或孩子中)在登记命令中被调用.
注意
fork()第三方C代码调用可能不会调用这些函数,除非它显式调用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模块提供了更强大的工具来支持新进程并检索其结果;使用该模块优先使用这些功能。特别检查用子进程模块部分。)如果mode是
P_NOWAIT,此函数返回newprocess的进程id;如果mode是P_WAIT,如果它正常退出,则返回进程退出代码,或-signal,其中signal是杀死进程的信号。在Windows上,进程ID实际上是进程句柄,因此可以与waitpid()功能。“”的“l”和“v”变种
spawn*函数在如何传递命令行参数方面有所不同。如果在编写代码时参数的数量是固定的,那么“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()all导致新进程继承当前进程的环境。注意env字典必须是字符串;无效的键值或值将导致函数失败,返回值为127.例如,以下调用
spawnlp()和spawnvpe()等价:import os os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null') L = ['cp', 'index.html', '/dev/null'] os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)
可用性:Unix,Windows。
spawnlp(),spawnlpe(),spawnvp()和spawnvpe()在Windows上不可用。spawnle()和spawnve()在Windows上不是线程安全的;我们建议你改用subprocess模块在版本3.6中更改:接受路径类对象.
os.P_NOWAITos.P_NOWAITO- mode参数的可能值
spawn*家庭offunctions。如果给出这些值中的任何一个,spawn*()一旦创建了新进程,函数将立即返回,进程id为返回值.Availability:Unix,Windows.
os.P_WAIT- //可能的值mode参数
spawn*家庭关系。如果以mode给出,spawn*()函数将不会返回,直到新进程运行完成并返回运行成功的进程的退出代码,或-signal如果一个信号杀死了进程.Availability:Unix,Windows.
os.P_DETACHos.P_OVERLAY- mode参数的可能值到
spawn*家庭offunctions。这些比上面列出的便携性差。P_DETACH类似于P_NOWAIT,但新进程与调用进程的控制台分离。如果使用P_OVERLAY,则会替换当前进程;spawn*功能不会返回.Availability:Windows.
os.startfile(path [, operation] )- 用相关的应用程序启动一个文件.
当没有指定operation或
"open",这就像在Windows资源管理器中双击该文件,或者从交互式命令shell中将文件名作为参数提供给 start 命令:文件随任何应用程序打开(如果任何)它的扩展是相关的.当给出另一个operation时,它必须是一个“命令动词”,它指定应该对文件做什么。Microsoft记录的常用动词是
"print"和"edit"(用于文件)以及"explore"和"find"(用于目录)。startfile()在关联的应用程序启动后立即返回。没有选项等待应用程序关闭,也无法检索应用程序的退出状态。path参数是相对于当前目录的。如果要使用绝对路径,请确保第一个字符不是斜杠("/");底层的Win32ShellExecute()功能如果不能正常工作。使用os.path.normpath()函数确保为Win32正确编码路径.为了减少解释器启动开销,Win32
ShellExecute()在首次调用此函数之前,函数不会被解析。如果该功能无法解决,NotImplementedError会被提出来可用性:Windows.
os.system(command)- 在子shell中执行命令(字符串)。这是通过调用标准C函数
system()来实现的,并且具有相同的限制。更改为sys.stdin等等不会反映在执行命令的环境中。如果command生成任何输出,它将被发送到解释器标准输出流.在Unix上,返回值是在为
wait()指定的格式中编码的进程的退出状态。请注意,POSIX没有指定C //的返回值的主题system()函数,所以Python函数的返回值是system-dependent.在Windows上,返回值是系统shell在运行后返回的command。shell是由Windows环境变量
COMSPEC给出的:它通常是cmd.exe,返回命令运行的exitstatus;在使用非原生shell的系统上,请参阅yourshell文档.subprocess模块为产生新流程和检索结果提供了更强大的功能;使用该模块比使用此功能更受欢迎。见用子进程模块在subprocess一些有用的食谱的文档.可用性:Unix,Windows .
os.times()- 返回当前的全局进程时间。返回值是一个具有五个属性的对象:
user– 用户时间system– 系统时间children_user– 所有子进程的用户时间children_system– 所有子进程的系统时间elapsed– 自上一个固定点以来经过的实时时间
为了向后兼容,此对象的行为类似于五个tupleconining
user,system,children_user,children_system,和elapsed按顺序.参见Unix手册页times(2)或相应的Windows平台API文档。在Windows上,只有
user和system众所周知;其他属性为零.Availability:Unix,Windows.
更改版本3.3:返回类型从元组变为元组 -喜欢objectwith named attributes.
os.wait()- 等待完成子进程,并返回一个包含其pidand退出状态指示的元组:一个16位数字,其低字节是杀死进程的信号numbert,其高字节是退出状态(如果signalnumber为零);如果生成核心文件,则设置低位字节的高位.
Availability:Unix .
os.waitid(idtype, id, options )- 等待一个或多个子进程完成.idtype可以是
P_PID,P_PGID或P_ALL.id指定要等待的pid options是由对WEXITED,WSTOPPED或WCONTINUED中的一个或多个进行OR运算,另外可以与WNOHANG或WNOWAIT进行OR运算。返回值是一个表示siginfo_t结构中包含的数据的对象,即:si_pid,si_uid,si_signo,si_status,si_code或None如果指定了WNOHANG并且有一个等待的nochildren州。可用性:Unix。
新版本3.3.
os.P_PIDos.P_PGIDos.P_ALL- 这些是idtype
waitid()的可能值。它们会影响id被解释可用性:Unix.
新版本3.3.
os.WEXITEDos.WSTOPPEDos.WNOWAIT- 可以用于的标记options在
waitid()指定要等待的信号.可用性:Unix .
3.3版本中的新功能
os.CLD_EXITEDos.CLD_DUMPEDos.CLD_TRAPPEDos.CLD_CONTINUED- 这些是
si_code在waitid().可用性:Unix.
新版本3.3.
os.waitpid(pid, options)- 这个功能的细节在Unix和Windows上有所不同.
在Unix上:等待进程id pid,并返回包含其进程ID和退出状态指示的元组(编码为
wait())。调用的语义受整数options的值的影响,应该是0正常操作.如果pid大于
0,waitpid()请求特定进程的状态信息。如果pid是0,请求是针对当前进程的进程组中任何子进程的状态。如果pid是-1,则询问属于当前进程的任何子进程。如果pid小于-1,进程组中的任何进程请求状态-pid(pid).一个
OSError当syscall返回-1.在Windows上:等待进程句柄pid给出的进程完成,并返回包含pid,它的退出状态向左移动了8位(移位使得该功能的跨平台使用更容易)。一个pid小于等于
0在Windows上没有特殊含义,并引发异常。整数options的值无效。pid可以指任何已知pid的进程,不一定是子进程。spawn*用P_NOWAIT返回合适的工艺手柄在版本3.5中更改:如果系统调用中断并且信号处理程序没有引发异常,则该函数现在重试系统调用而不是引发
InterruptedError异常(参见 PEP 475 为理由).
os.wait3(options)- 类似于
waitpid(),除了没有给出进程id参数,并返回包含子进程id,退出状态指示和资源使用信息的a3元素元组。参考resource.getrusage()有关资源使用信息的详细信息。option参数与waitpid()和wait4().可用性:Unix .
os.wait4(pid, options)- 相近
waitpid(),除了包含子进程id,退出状态指示和资源使用信息的3元素元组外,返回resource.getrusage()有关资源使用信息的详细信息。wait4()的参数与提供给waitpid().的参数相同//可用性:Unix.
os.WNOHANGwaitpid()如果没有立即可用的子进程状态,则立即返回。在这种情况下,函数返回(0, 0)vailability:Unix .
os.WCONTINUED- 此选项会导致子进程报告,因为自上次报告状态后,它们已从作业控制停止继续报告.
Availability:某些Unix系统.
os.WUNTRACED- 这个选项会导致子进程被报告,如果它们已被停止但是当前状态自停止以来还没有被报告.
Availability:Unix .
以下函数将system(), wait()或waitpid()返回的进程状态代码作为参数。它们可以用来确定一个过程的配置.
os.WCOREDUMP(status)- 返回
True如果为进程生成核心转储,则返回False.可用性:Unix .
os.WIFCONTINUED(status)- 返回
True如果从作业控制停止继续进程,否则返回False.可用性:Unix .
os.WIFSTOPPED(status )- 如果进程已经停止,则返回
True,否则返回False.可用性:Unix.
os.WIFSIGNALED(status)- 返回
True如果由于信号退出进程,否则返回False.可用性:Unix .
os.WIFEXITED(status)- 返回
True如果进程退出使用exit(2)系统调用,否则返回False.可用性:Unix .
os.WEXITSTATUS(status)- 如果
WIFEXITED(status)为真,则将整数参数返回到exit(2)系统调用。否则,返回值是没有意义的.可用性:Unix .
os.WSTOPSIG(status)- 返回导致停止的过程
Availability:Unix .
os.WTERMSIG(status)- 返回导致过程退出的信号。
可用性: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- 该标志可以与任何其他调度策略进行“或”运算。当具有此标志的进程设置分叉时,其子进程的调度策略和优先级将被重置为默认值
- class
os.sched_param// (sched_priority) - 此类表示在
sched_setparam(),sched_setscheduler()和sched_getparam()中使用的可调调度参数。它是不变的目前,只有一个可能的参数:
sched_priority- 调度策略的调度优先级.
os.sched_get_priority_min(policy)- 获得policy. policy的最小优先级值是上述的调度策略常数之一.
os.sched_get_priority_max(policy)- 获取policy. policy是上面的政策常数之一.
os.sched_setscheduler(pid, policy, param)- 使用PID 设置进程的调度策略pid。一个 pid0表示调用过程。policy是上面的调度策略常量之一。param是
sched_param实例
os.sched_getscheduler(pid)- 用PID调整过程的调度策略pid。一个 pid0表示调用进程。结果是上面的一个调度策略常量.
os.sched_setparam(pid, param)- 用PID pid设置进程的调度参数。一个 pid0表示调用过程。param是
sched_param实例
os.sched_getparam(pid)- 将调度参数作为
sched_param实例返回PID pid进程。一个 pid0表示调用进程.
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回复CPU的过程pid(或当前进程为零)仅限于
其他系统信息¶
os.confstr(name)- 返回字符串值的系统配置值。name指定要检索的配置值;它可以是一个字符串,它是已定义系统值的名称;这些名称在许多标准(POSIX,Unix 95,Unix 98和其他标准)中指定。有些平台也定义了其他名称。主机操作系统已知的名称作为
confstr_names字典。对于未包含在该映射中的配置变量,为name也被接受了如果name没有定义,
Noneisreturned.如果name是一个字符串,不知道,
ValueError被提出来了。如果是name主机系统不支持,即使它包含在confstr_names,一个OSError用错误号码errno.EINVAL提出.Availability:Unix.
os.confstr_names- 字典映射名称接受
confstr()到主机操作系统为这些名称定义的整数值。这可以用来确定系统已知的名称集.Availability:Unix .
os.cpu_count()- 返回系统中的CPU数量。返回
None如果未确定的话此数字不等于当前进程可以使用的CPU数量。可以使用
len(os.sched_getaffinity(0))获取可用CPU的数量。版本3.4.
os.getloadavg()- 如果负载平均值不可用,则返回系统运行队列中过去1分钟,5分钟和15分钟的平均进程数,或者调高
OSError.Availability:Unix。
os.sysconf(name)- 返回整数值系统配置值。如果未定义name指定的配置值,则返回
-1。关于nameconfstr()也适用于此;提供有关已知名称信息的字典由sysconf_names.可用性:Unix .
os.sysconf_names- 接受的字典映射名称
sysconf()到主机操作系统为这些名称定义的整数值。这可以用来确定系统已知的名称集.Availability:Unix .
以下数据值用于支持路径操作操作。这些都是为所有平台定义的.
对路径名的高级操作在os.path模块中定义.
os.curdir- 操作系统用于引用当前目录的常量字符串。对于Windows和POSIX,这是
"."。也可以通过os.path.
os.pardir- 操作系统用于引用父目录的常量字符串。对于Windows和POSIX,这是
".."。也可以通过os.path.
os.sep- 操作系统用来分隔路径名组件的字符。对于POSIX和
"/"这是"\\"对于Windows。请注意,知道这不足以解析或连接路径名 – 使用os.path.split()和os.path.join()– 但偶尔会有用。也可以通过os.path.
os.altsep- 操作系统用来分隔路径名组件的替代字符,或
None如果只存在一个分隔符。在Windows系统上将其设置为"/",其中sep是反斜杠。也可以通过os.path.
os.extsep- 将基本文件名与扩展名分开的字符;例如,
"."在os.py。也可以通过os.path.
os.pathsep- 操作系统常用的字符来分隔搜索路径组件(如
PATH),例如":"用于POSIX或";"用于窗口。也可以通过os.path.
os.defpath- 使用
exec*p*和spawn*p*使用的默认搜索路径,如果环境没有"PATH"键。也可以通过os.path.
os.linesep- 用于分隔(或者说,终止)当前平台上的行的字符串。这可能是单个字符,例如
"\n"表示POSIX,或多个字符,例如"\r\n"表示Windows。不使用os.linesep在文本模式(默认)中打开文件时作为行终止符;在所有平台上使用单个"\n".
os.devnull- 空设备的文件路径。例如:
"/dev/null"forPOSIX,"nul"对于Windows。也可以通过os.path.
os.RTLD_LAZYos.RTLD_NOWos.RTLD_GLOBALos.RTLD_LOCALos.RTLD_NODELETEos.RTLD_NOLOADos.RTLD_DEEPBIND- 用于
setdlopenflags()和getdlopenflags()功能。参见Unix手册页面dlopen(3)对于不同的旗帜是什么意思.3.3版本中的新功能
随机数¶
os.getrandom(size, flags=0)- 到达size随机字节。该函数可以返回少于请求的字节数.
这些字节可用于播种用户空间随机数生成器或用于加密目的.
getrandom()依赖于从设备驱动程序和其他环境噪声源收集的熵。不必要地读取大量数据会对/dev/random和/dev/urandomdevices.flags参数是一个位掩码,可以包含零个或多个以下值ORed together:
os.GRND_RANDOM和GRND_NONBLOCK.另请参见Linux getrandom()手册页。
可用性:Linux 3.17和更新.
新版本3.6.
os.urandom(size)- 返回一串size随机字节用于加密使用.
此函数从特定于OS的随机源返回随机字节。对于加密应用程序来说,这些数据应该是不可预测的,尽管它的确切质量取决于操作系统的实现.
在Linux上,如果
getrandom()系统调用可用,它将用于阻塞模式:阻塞,直到系统urandom熵池被初始化(内核收集128位熵)。见PEP 524 的理由。在Linux上,getrandom()函数可用于在非阻塞模式下获取随机字节(使用GRND_NONBLOCKflag)orto poll直到系统urandom entropy pool初始化.在类Unix系统中,从
/dev/urandom设备读取随机字节。如果/dev/urandom设备不可用或不可读,NotImplementedError异常被提出.在Windows上,它将使用
CryptGenRandom().也可以看看
secrets模块提供更高级别的功能。有关平台提供的随机数生成器的易用界面,请参阅random.SystemRandom.在版本3.6.0中更改:在Linux上,
getrandom()现在用于阻塞模式以提高安全性.更改版本3.5.2:在Linux上,如果
getrandom()系统调用块(urandom entropy池尚未初始化),重新读取/dev/urandom.在版本3.5中更改:在Linux 3.17及更高版本上,
getrandom()系统调用现在可用时使用。在OpenBSD 5.6及更高版本中,现在使用Cgetentropy()函数。这些函数避免使用内部文件描述符
os.GRND_NONBLOCK- 默认情况下,从
/dev/random,getrandom()阻止ifno随机字节可用,当从/dev/urandom读取时,它阻止熵池尚未初始化.如果设置了
GRND_NONBLOCK标志,则getrandom()在这些情况下不会阻止,而是立即提升BlockingIOError.版本3.6.
os.GRND_RANDOM- 如果设置此位,则从中抽取随机字节
/dev/random池而不是/dev/urandompool.新版本3.6.
评论被关闭。