os各种各样的操作系统接口
这个模块提供了一种使用操作系统相关功能的移动方式。如果您只想读取或写入一个文件,请查看open(),如果您想要操作路径,请参见操作os.path模块,如果您想要读取命令行上所有文件中的所有行,请参阅fileinput模块。要创建临时文件和目录,请查看tempfile模块,对于高级文件和目录处理,可以查看shutil模块。
关于这些功能的可用性说明:
1.Python的所有内置操作系统的设计都是这样的,只要有相同的功能,它就会使用相同的接口;例如,函数os.stat(path)以相同的格式返回关于路径的统计信息(恰好是由POSIX接口产生的)。
2.特定操作系统特有的扩展也可以通过操作系统模块获得,但是使用它们当然是对可移植性的威胁。
3.接受路径或文件名的所有函数都接受字节和字符串对象,如果返回路径或文件名,则会产生相同类型的对象。
4.“Availability:Unix”说明这一功能在Unix系统中很常见。它并没有在特定的操作系统上声明它的存在。
5.如果没有单独注明,所有声称“Availability:Unix”的函数都在mac os x上支持,这是在Unix内核上构建的。
注意 该模块中的所有函数都在无效或不可访问的文件名和路径的情况下抛出OSError,或者其他具有正确类型的参数,但是操作系统不接受。
exception os.error
内置 OSError 的别名
os.name
操作系统提供的名字。有下面几个名字:'posix','nt','java'。
sys.platform 的粒度更细。os.uname()提供了系统相关的版本信息。platform 模块提供了系统的详细信息。
文件名,命令参数,环境变量
在 Python里,文件名,命令参数,环境变量用字符串类型表示。在一些系统里,在将这些字符串发送到操作系统之前,必须将这些字符串进行解码并从字节中解码。Python使用文件系统编码来执行此转换(看 sys.getfilesystemencoding())。
在3.1版有改变:在一些系统里,使用文件系统编码的转换可能会失败。在 Python里使用 surrogateescape 编码错误处理程序,意味着无法解码的字节被Unicode字符U + DCxx替换为解码,而这些字节又被转换为编码的原始字节。
文件系统编码必须保证成功解码128下的所有字节。如果文件系统编码不能提供此保证,API函数可能会引起单值错误。
Process Parameters
这些函数和数据项提供信息,并对当前的进程和用户进行操作。
os.ctermid()
返回对应于进程控制终端的文件名。
Availability:Unix
os.environ
表示字符串环境的映射对象。例如,environ['HOME']是你 home 的路径名(在一些平台),就像 C 中的 gotenv("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()函数,你如删除映射里的项到未设置的环境变量。当 os.environ 里的项被删除时,unsetenv() 将自动调用,删除的方法有 pop() 和 clear()。
os.environb
environ 的字节版:将环境表示为字节字符串的映射对象。environ 和 environb 是同步的(修改 environ 也会更新 environb,反之也一样)。
environb 仅仅只在 supports_bytes_environ 为 True 时可用。
os.chdir(path)
os.fchdir(fd)
os.getcwd()
以上方法描述在 Files and Directories。
os.fsencode(filename)
将类似路径的文件名与“surrogateescape”错误处理程序(或“严格”)编码到文件系统中;返回字节不变。
fsdecode() 是这个方法的反转。
增加支持实现 os.PathLike 接口。
os.fsdecode(filename)
从“surrogateescape”错误处理程序(或在Windows上“严格”)中从文件系统中解码类似路径的文件名;返回str不变。
fsencode() 是这个方法的反转。
增加支持实现 os.PathLike 接口。
os.fspath(path)
返回路径的文件系统表示。
如果传入了str或字节,那么它将保持不变。否则,调用__fspath__(),只要它是一个str或bytes对象,它的值就会返回。在所有其他情况下,都报TypeError。
class os.PathLike
表示文件系统路径的对象的抽象基类,例如,pathlib.PurePath。
abstractmethod __fspath__()
返回路径的文件系统表示。
该方法应该只返回一个str或字节对象,首选项是str。
os.getenv(key,default=None)
如果环境变量 key 存在,返回它的值,不存在返回 default 的值。key,default 和 返回值是字符串。
在 Unix,keys 和 value 被 sys.getfilesystemencoding() 解码和“surrogateescape”错误处理程序。如果你想使用不同的编码,使用 os.getenvb()。
可利用:更多的是在 Unix,Windows。
os.getenvb(key,default=None)
如果环境变量 key 存在,返回它的值,不存在返回 default 的值。key,default 和 返回值是字节。
getenvb() 仅仅在 supports_bytes_environ 为 True 时可用。
可利用:更多的是在 Unix。
os.get_exec_path(env=None)
返回将在启动进程时搜索命名可执行文件的目录列表,类似于shell。在指定的时候,env应该是一个环境变量字典来查找路径。默认情况下,当env为None时,使用 environ。
os.getegid()
返回当前进程的有效组id。这对应于在当前进程中执行的文件上的“set id”位。
可利用:Unix
os.geteuid()
返回当前程序的有效用户 id。
可利用:Unix。
os.getgid()
返回当前程序的组 id。
可利用:Unix。
os.getgrouplist(user,group)
用户所属的组id返回列表。如果组不在列表中,则包括;通常,组被指定为用户密码记录中的组ID字段。
可利用:Unix。
os.getgroups()
与当前进程相关联的补充组id的返回列表。
可利用:Unix。
注意:在 Mac OS X 里,getgroups() 的行为和在 Unix 平台里的不同。如果Python解释器是基于10.5或更早的部署目标构建的,getgroup()返回与当前用户进程关联的有效组id列表。此列表仅限于系统定义的条目数,通常为16,并且如果有适当的特权可以通过调用setgroups()进行修改。如果使用大于10.5的部署目标构建,getgroups()将返回与该进程的有效用户id关联的用户的当前组访问列表。组访问列表可能在流程的生命周期内更改,它不受对setgroups()的调用的影响,它的长度不限于16。可以通过sysconfig . get_config_var()获得部署目标值,MACOSX_DEPLOYMENT_TARGET。
os.getlogin()
返回登录到进程控制终端的用户的名称。在大多数情况下,使用环境变量LOGNAME或USERNAME来查找用户是谁,或pwd.getpwuid(os.getuid())[0]来获取当前真实用户id的登录名更有用。
可利用:Unix,Windows。
os.getpgid(pid)
用进程id pid返回进程的进程组id。如果pid为0,则返回当前进程的进程组id。
可利用:Unix。
os.getpgrp()
返回当前程序组的 id。
可利用:Unix。
os.getpid()
返回当前程序 id。
os.getppid()
返回父进程id。当父进程退出时,在Unix上返回的id是init进程(1)中的一个,在Windows上它仍然是相同的id,这可能已经被另一个进程重用了。
可利用:Unix,Windows。
os.getpriority(which,who)
计划调度优先级。值 which 是PRIO_PROCESS、PRIO_PGRP或PRIO_USER其中一个,以及 who 被解释为与哪个(PRIO_PROCESS的进程标识符、PRIO_PGRP的进程组标识符、PRIO_USER的用户ID)相关。who表示(分别)调用进程、调用进程的进程组或调用进程的实际用户ID的零值。
可利用:Unix。
os.PRIO_PROCESS
os.PRIO_PGRP
os.PRIO_USER
getpriority() 和 setpriority() 的参数。
可利用:Unix。
os.getresuid()
返回一个元组(ruid, euid, suid),表示当前进程的真实、有效和保存的用户id。
可利用:Unix。
os.getresgid()
返回一个tuple (rgid, egid, sgid),表示当前进程的真实、有效和保存的组id。
可利用:Unix。
os.getuid()
返回当前程序真实的用户id。
可利用:Unix。
os.initgroups(username,gid)
调用系统initgroups()来初始化组访问列表,其中包含指定用户名的所有组,加上指定的组id。
可利用:Unix。
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 组。
可利用:Unix。
os.seteuid(euid)
设置当前程序的有效用户 id。
可利用:Unix。
os.setgid(gid)
设置当前程序的 id 组。
可利用:Unix。
os.setgroups(groups)
设置与当前进程关联的补充组id列表到 groups。groups 必需是一个列表,列表里的每一项必需是整数。此操作通常只对超级用户可用。
可利用:Unix。
注意:在Mac OS X上,组的长度可能不会超过系统定义的有效组id的最大数量,通常为16。查看 getgroups() 的文档,它可能不会返回与调用
setgroups() 相同的组列表。
os.setpgrp()
调用系统调用setpgrp()或setpgrp(0,0),这取决于实现了哪个版本(如果有的话)。参见Unix手册中的语义。
可利用:Unix。
os.setpgid(pid,pgrp)
调用系统调用setpgid(),将id为id的进程组id设置为id pgrp的进程组。参见Unix手册中的语义。
可利用:Unix。
os.setpriority(which,who,prioity)
设置程序调度优先级。值 which 是 PRIO_PROCESS,PRIO_PGRP或PRIO_USER。who 是和 which 相对的(一个程序对应 PRIO_PROCESS,程序组对应 PRIO_PGRP,用户 ID 对应 PRIO_USER)。零值的 who 表示调用程序,程序组,或用户的真实 ID。priority 是-20到19间的值。默认是0;低优先级会导致更有利的调度。
可利用:Unix。
os.setregid(rgid,egid)
设置当前程序的真实有效的 id 组。
可利用:Unix。
os.setresgid(rgid,egid,sgid)
设置当前进程的真实、有效和保存的组id。
可利用:Unix。
os.setresuid(ruid,euid,suid)
设置当前进程的真实、有效和保存的用户id。
可利用:Unix。
os.setreuid(ruid,euid)
设置当前程序的真实有效的用户 id。
可利用:Unix。
os.getsid(pid)
调用系统调用 getsid()。
可利用:Unix。
os.setsid()
调用系统调用 setsid()。
可利用:Unix。
os.setuid(uid)
设置当前程序的用户 id。
可利用:Unix。
os.strerror(code)
返回在 code 里错误代码的错误信息。在平台里 strerror() 返回 Null。当传一个未知错误数字时,报 ValueError。
os.supports_bytes_environ
如果本机 OS 环境为字节,返回 True。Windows 为 False。
os.umask(mask)
设置当前数字umask并返回之前的umask。
os.uname()
返回当前操作系统的信息。返回值是一个对象,有5个属性:
sysname —— 操作系统名
nodename —— 网络上机器的名称。
release —— 操作系统版本。
version —— 操作系统版本。
machine —— 硬件标识符
为了向后兼容,这个对象是可迭代的,行为像包含了 sysname,nodename,release,version,machine 的元组。
一些系统将节点名截断为8个字符或指向主导组件;获取主机名的更好方法是socket.gethostname(),甚至是socket.gethostbyaddr(socket.gethostname())。
可利用:Unix。
os.unsetenv(key)
不设置(删除)环境变量名 key。对环境的这些更改会影响从os.system()、popen()或fork()和execv()开始的子进程。
当支持 unsetenv() 时,删除 os.environ 里的项自动调用 unsetenv();然而,调用 unsetenv() 不更新 os.environ,因此,删除os. environment上的条目实际上更可取。
可利用:Unix,Windows。
创建文件对象
这个方法创建新的文件对象。(看 open() 文件描述)。
os.fdopen(fd,*args,**kwargs)
返回连接到文件描述符fd的打开文件对象。这是open()内置函数的别名,并接受相同的参数。惟一的区别是,fdopen()的第一个参数必须始终是整数。
文件描述符操作
这些函数使用文件描述符引用的I/O流进行操作。
文件描述符是与当前进程打开的文件对应的小整数。例如,标准输入通常是文件描述符0,标准输出是1,标准错误是2。由一个过程打开的进一步文件将被分配3、4、5等等。“文件描述符”这个名称有点欺骗性;在Unix平台上,套接字和管道也被文件描述符引用。
fileno()方法可以在需要时获取与文件对象关联的文件描述符。注意,直接使用文件描述符将绕过文件对象方法,忽略诸如数据内部缓冲等方面。
os.close(fd)
关闭文件描述 fd。
注意:此函数用于低级I/O,必须应用于os.open()或pipe()返回的文件描述符。要关闭由内置函数open()或popen()或fdopen()返回的“file对象”,请使用它的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.device_encoding(fd)
如果它连接到终端,返回一个字符串,该字符串描述与fd相关联的设备的编码;否则返回 None。
os.dup(fd)
返回文件描述符 fd 的一个副本。新文件描述是不可继承的。
在 Windows,当复制一个标准流时(0:stdin,1:stdout,2:stderr),新文件描述是可继承的。
os.dup2(fd,fd2,inheritable=True)
复制文件描述 fd 到 fd2,在必要时关闭后者。fd2 默认是可继承的,如果 inheritable 是 False 则不可继承。
os.fchmod(fd,mode)
将fd提供的文件模式更改为数值模式。请参阅chmod()的文档以获取模式的可能值。在Python 3.3中,这相当于os。chmod(fd,模式)。
可利用:Unix。
os.fchown(fd,uid,gid)
将fd提供的文件的所有者和组id更改为数字uid和gid。要保持其中一个id不变,将其设置为-1。参见chown()。在Python 3.3中,这相当于os。chown(fd, uid, gid)。
可利用:Unix。
os.fdatasync(fd)
用文件描述符fd将文件写入磁盘。不强制更新元数据。
可利用:Unix。
注意:这个方法不能在 MacOS 使用。
os.fpathconf(fd,name)
返回与打开文件相关的系统配置信息。name 指定要检索的配置值。系统值的名称可能是一个字符串;name 是一个指定的标准数字(POSIX 1,Unix 95,Unix 98,and others)。一些平台还定义了其他名称。在pathconf_names字典中给出了主机操作系统已知的名称。对于不包含在映射中的配置变量,也可以通过传递一个整数来表示名称。
如果 name 是一个未知的字符串,ValueError。如果主机系统不支持特定的名称值,即使它包含在pathconf_names中,OSError,errno.EINVAL
在 Python 3.3 中 ,它等于 os.pathconf(fd,name)。
可利用:Unix。
os.fstat(fd)
获取文件描述 fd 的状态,返回一个 stat_result 对象。
在 Python 3.3 中,这个等于 os.stat(fd)。
可以看 stat() 方法。
os.fstatvfs(fd)
返回有关包含与文件描述符fd相关的文件的文件系统的信息,如statvfs()。在Python 3.3中,这相当于os.statvfs(fd)。
可利用:Unix。
os.fsync(fd)
用文件描述符fd将文件写入磁盘。在Unix上,这称为本机fsync()函数;在Windows上,MS _commit()函数。
如果您从一个缓冲的Python文件对象f开始,首先执行f.flush(),然后执行os.fsync(f.fileno()),以确保将与f关联的所有内部缓冲区写入磁盘。
可利用:Unix,Windows。
os.ftruncate(fd,length)
截断与文件描述符fd相对应的文件,以便它的长度最多为字节。在Python 3.3中,这相当于os.truncate(fd,length)。
可利用:Unix,Windows。
os.get_blocking(fd)
获取文件描述符的阻塞模式:如果 O_NONBLOCK 设置了,为 False。如果没有设置,为 True。
看 set_blocking() 和 socket.socket.setblocking()。
可利用:Unix。
os.isatty(fd)
如果文件描述符 fd 打开了和连接了一个 tty(-like) 返回 True,否则返回 False。
os.lockf(fd,cmd,len)
应用,测试或删除一个打开的文件描述 POSIX 锁。fd 是一个打开的文件描述符。cmd 指使用的命令,可以是 F_LOCK,F_TLOCK,F_UNLCK 或 F_TEST。len 指要锁定的文件的部分。
可利用:Unix。
os.F_LOCK
os.F_TLOCK
os.F_ULOCK
os.F_TEST
指定要使用什么动作lockf()的标志。
可利用:Unix。
os.lseek(fd,pos,how)
将文件描述符fd的当前位置设置为定位pos,修改方式为:SEEK_SET或0来设置相对于文件开头的位置;SEEL_CUR 或 1 是设置相对于当前位置;SEEK_END 或 2 设置相对于文件结尾。以字节为单位返回新的游标位置,从开始处开始。
os.SEEK_SET
os.SEEK_CUR
os.SEEK_END
lseek() 方法的参数。它们的值是 0,1,2。
os.open(path,flags,mode=0o777,*,dir_fd=None)
打开文件路径,并根据 flag 设置不同的 flag ,并可能根据 mode 设置其 mode 。当计算 mode 时,当前的 umask 值首先被屏蔽。返回一个新文件描述符,这个描述符是不可继承的。
对 flag 和 mode 值的描述,看 C 文档;flag 常量(比如O_RDONLY和O_WRONLY)是在os模块中定义的。特别是,在Windows中添加O_BINARY需要以二进制模式打开文件。
这个方法支持相对路径和 dir_fd 参数。
注意:此函数用于低级I/O。对于正常使用,使用内置函数open(),它返回一个带有read()和write()方法(以及更多)的文件对象。要在文件对象中封装文件描述符,请使用fdopen()。
下面的常量是指向open()函数的flags参数的选项。它们可以使用位或运算符 | 进行组合。有些在所有平台上都没有。要了解它们的可用性和使用情况,请参考Unix上的open(2)手册页或Windows上的MSDN。
os.O_RDONLY
os.O_WRONLY
os.O_RDWR
os.O_APPEND
os.O_CREAT
os.O_EXCL
os.O_TRUNC
上面的常量在 Unix 和 Windows 里可用。
os.O_DSYNC
os.O_RSYNC
os.O_SYNC
os.O_NDELAY
os.O_NONBLOCK
os.O_NOCTTY
os.O_CLOEXEC
上面的常量仅仅在 Unix 里可用。
os.O_BLNARY
os.O_NOINHERIT
os.O_SHORT_LIVED
os.O_TEMPORARY
os.O_RANDOM
os.O_SEQUENTIAL
os.O_TEXT
上面的常量仅仅在 Windows 里可用。
os.O_ASYNC
os.O_DIRECT
os.O_DIRECTORY
os.O_NOFOLLOW
os.O_NOATIME
os.O_PATH
os.O_TMPFILE
os.O_SHLOCK
os.O_EXLOCK
上面的常量是扩展,如果它们不是由C库定义的,则不存在。
os.openpty()
打开一个新的伪终端对。分别返回对pty和tty的两个文件描述符(master,slave)。
新的文件描述是不可继承的。对于一个(稍微)更轻便的方法,使用pty模块。
可利用:Unix。
os.pipe()
创建一个管道。返回一个文件描述符(r,w)可用来读和写,新文件描述符不可继承。
可利用:Unix,Windows。
os.pipe2(flags)
创建一个带 flags 的管道。可以通过使用这些值中的一个或多个来构建标志:O_NONBLOCK,O_CLOEXEC。返回一个文件描述符(r,w)可用来读和写
可利用:Unix。
os.posix_fallocate(fd,offset,len)
确保为fd指定的文件分配足够的磁盘空间,从偏移量开始,并继续使用len字节。
可利用:Unix。
os.posix_fadvise(fd,offset,len,advice)
声明意图访问特定模式中的数据,从而允许内核进行优化。该建议适用于由fd指定的文件区域,从偏移量开始,并继续使用len字节。advice 可能的值是:POSIX_FADV_NORMAL,POSIX_FADV_SEQUENTIAL,POSIX_FADV_RANDOM,POSIX_FADV_NOREUSE,POSIX_FADV_WILLNEED,POSIX_FADV_DONTNEED。
可利用:Unix。
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。
os.pread(fd,buffersize,offset)
从文件描述符,fd,在偏移位置读取。它将读取到buffersize的字节数。文件偏移量保持不变。
可利用:Unix。
os.pwrite(fd,str,offset)
将bytestring写入文件描述符,fd,从偏移量,保持文件偏移量不变。
可利用:Unix。
os.read(fd,n)
从文件描述符里最多读取 n 个字节。返回包含读取字节的字节字符串。如果已达到fd引用的文件的末尾,则返回一个空的字节对象。
注意: 此函数用于低级I/O,必须应用于os.open()或pipe()返回的文件描述符。读取由内置函数open()或popen()或fdopen()或sys所返回的“file对象”。stdin,使用它的read()或readline()方法。
3.5版的改变:如果系统调用被中断,而信号处理程序没有引发异常,则该函数现在重试系统调用,而不是引发InterruptedError异常。
os.sendfile(out,in,offset,count)
os.sendfile(out,in,offset,count,[headers,][trailers,]flags=0)
从文件描述符 in 到文件描述符 out 的复制计数字节从偏移量开始。返回发送的字节数。当EOF达到返回0时。
第一个函数是全平台支持的。
在 Linux,如果 offset 是 None。从当前位置 in 读取字节并更新位置。
第二个函数可能在 Mac OS X 和 FreeBSD 里可用,header和trailers是在写入数据之前和之后编写的任意的缓冲区序列。返回的值和第一个函数相同。
在 Mac OS X 和 FreeBSD ,值为0的值指定发送到到达结束时为止。
所有平台都支持socket作为文件描述符,有些平台允许其他类型(如常规文件、管道)。
跨平台的应用不应该使用 headers,trailers和 flags 参数。
可利用:Unix。
注意:对sendfile()的高级包装器(),看 socket.socket.sendfile()。
os.set_blocking(fd,blocking)
设置指定文件描述符的阻塞模式。如果阻塞为False,则设置O_NONBLOCK标志,否则清除标记。
可以看 get_blocking() 和 socket.socket.setblocking()。
os.SF_NOBIDKIO
os.SF_MNOWAIT
os.SF_SYNC
函数 sendfile() 的参数,如果支持。
可利用:Unix。
os.readv(fd,buffers)
从文件描述符fd读取一些可变的字节,比如对象缓冲区。readv()将数据传输到每个缓冲区,直到它被填满,然后转移到序列中的下一个缓冲区来保存其余的数据。readv()返回读取的字节总数(可能小于所有对象的总容量)。
可利用:Unix。
os.tcgetpgrp(fd)
返回与fd指定的终端相关联的进程组(开放文件描述符由os.open()返回)。
可利用:Unix。
os.tcsetpgrp(fd,pg)
设置与fd指定的终端相关联的进程组(由os.open()返回的开放文件描述符)到pg。
可利用:Unix。
os.ttyname(fd)
返回一个字符串,该字符串指定与文件描述符fd相关联的终端设备。如果fd与终端设备无关,则会引发异常。
可利用:Unix。
os.write(fd,str)
在str到文件描述符fd中写入bytestring。返回实际写入的字节数。
注意:此函数用于低级I/O,必须应用于os.open()或pipe()返回的文件描述符。使用内置函数open()或popen()或fdopen()或sys来编写“file对象”。stdout或系统。stderr,使用它的write()方法。
os.writev(fd,buffers)
将缓冲区的内容写入文件描述符fd。缓冲区必须是一个字节类对象的序列。缓冲区是按数组顺序处理的。第一个缓冲区的所有内容都是在进行第二个缓冲区之前编写的,等等。操作系统可以设置一个限制(sysconf()值SC_IOV_MAX),用于可使用的缓冲区的数量。
writev()将每个对象的内容写入文件描述符,并返回写入的总字节数。
可利用:Unix。
查询终端的大小
os.get_terminal_size(fd=STDOUT_FILEND)
返回终端窗口的尺寸(columns,lines)。
可选参数fd(默认STDOUT_FILENO,或标准输出)指定应该查询哪个文件描述符。
如果文件描述符 fd 没有连接终端,报 OSError 错误。
shutil.get_terminal_size() 是一个高级函数,一般情况下使用它。os.get_terminal_size 是一个低级的实现。
可利用:Unix,Windows。
class os.terminal_size
一个元组,(columns,lines)表示终端窗口尺寸。
columns
终端窗口的宽度
lines
终端窗口的高度
继承的文件描述符
一个文件描述符有一个 “inheritable” 的标志表明这个文件描述符是否能被子进程继承。从3.4版开始,文件描述符创建时默认不可继承。
在 UNIX,不可继承的文件描述符在执行新程序时被关闭在子进程中。其他文件描述符是继承的。
在 Windows,在子进程中,除了标准流(文件描述符0、1和2:stdin、stdout和stderr)之外,不可继承的句柄和文件描述符是封闭的,它们总是继承的。使用 spawn*函数,所有继承的句柄和所有可继承的文件描述符都是继承的。使用 subprocess 模块,除了标准流之外的所有文件描述符都是关闭的,并且只有当close_fds参数为False时,可继承的句柄才会被继承。
os.get_inheritable(fd)
获取指定文件描述符的 "inheritable" 标志(一个布尔值)。
os.set_inheritable(fd,inheritable)
对指定的文件描述符设置 "inheritable" 标志。
os.get_handle_inheritable(handle)
获取指定句柄的 "inheritable" 标志(一个布尔值)。
可利用:Windows。
os.set_handle_inheritable(handle,inheritable)
对指定的句柄设置 "inheritable" 标志。
可利用:Windows。
文件和目录
在一些 Unix 平台,一些方法支持一个或更多的特性:
指定文件描述符:对于一些方法,path 参数不仅仅是一个字符串,也可以是一个文件描述符。然后,函数将对描述符所引用的文件进行操作。(对于POSIX系统,Python将调用f…版本的功能。)
您可以使用 os.supports_fd 检查在您的平台上是否可以指定path作为文件描述符。如果不可用,则使用它将引发 NotImplementedError。
如果该函数还支持 dir_fd 或 follow_symlinks 参数,则在提供路径作为文件描述符时指定其中之一是错误的。
路径相对于目录描述符:如果 dir_fd 不是 None,那么它应该是一个指向目录的文件描述符,操作的路径应该是相对的; path 将相对于该目录。如果 path 是绝对的,那么 dir_fd 将被忽略。(对于 POSIX 系统,Python将调用…或f……在版本的功能。)
您可以使用 os.supports_dir_fd 检查您的平台上是否支持 dir_fd 。如果不可用,则使用它将引发 NotImplementedError。
不遵循符号链接:如果 follow_symlinks 是 False,并且运行的路径的最后一个元素是一个符号链接,函数将在符号链接本身上运行,而不是链接指向的文件。(对于POSIX系统,Python将调用l…版本的功能。)
您可以使用 os.supports_follow_symlinks 检查您的平台上是否支持 follow_symlinks 。如果不可用,则使用它将引发 NotImplementedError。
os.access(path,mode,*,dir_fd=None,effective_ids=False,follow_symlinks=True)
使用真实的uid/gid来测试访问路径。注意,大多数操作将使用有效的uid/gid,因此,在suid/sgid环境中可以使用这个例程来测试调用用户是否具有指定的路径访问权。mode 应该是F_OK来测试路径的存在,或者它可以是一个或多个R_OK、W_OK和X_OK来测试权限。如果允许访问,则返回True,否则为False。有关更多信息,请参见Unix man页面访问(2)。
该函数可以支持指定相对于目录描述符的路径,而不支持符号链接。
如果effective_ids是真的,access() 将执行访问检查使用的有效uid / gid代替真正的uid / gid。您的平台上可能不支持 effective_ids;您可以使用 os.supports_valive_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()
请注意:即使访问()表示它们将成功,特别是对于可能具有超出通常的POSIX permission-bit模型的权限语义的网络文件系统的操作,I/O操作可能会失败。
os.F_OK
os.R_OK
os.W_OK
os.X_OK
值作为 access() 的模式参数,分别测试路径的存在性、可读性、可写性和可执行性。
os.chdir(path)
改变当前的工作目录到 path。
这个方法支持指定一个文件描述符。这个描述符必需是一个打开的目录,不是一个文件。
os.chflags(path,flags,*,follow_symlinks=True)
将路径的标志设置为数字标志。标志可以采用以下值(在 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
这个函数可以支持不遵循符号链接。
可利用:Unix。
os.chmod(path,mode,*,dir_fd=None,follow_symlinks=True)
将路径的模式更改为数值模式。模式可以采用下列值之一(在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.chown(path,uid,gid,*,dir_fd=None,follow_symlinks=True)
将路径的所有者和组 id 更改为数值 uid 和 gid 。要保持其中一个 id 不变,将其设置为 -1。
该函数可以支持指定文件描述符,路径相对于目录描述符,而不支持符号链接。
请参见 shutil.chown() ,用于在除了数字id之外接受名称的高级函数。
可利用:Unix。
os.chroot(path)
改变当前程序的 root 目录到 path。
可利用:Unix。
os.fchdir(fd)
将当前工作目录更改为由文件描述符fd表示的目录。描述符必须引用打开的目录,而不是打开的文件。在Python 3.3中,这相当于os.chdir(fd)。
可利用:Unix。
os.getcwd()
返回当前工作目录的字符串。
os.getcwdb()
返回当前工作目录的字节。
os.lchflags(path,flags)
将路径的标志设置为数字标志,如chflags(),但不遵循符号链接。在Python 3.3中,这相当于 os.chflags(path,flags,follow_symlinks = False)。
可利用:Unix。
os.lchmod(path,mode)
将路径的模式更改为数值模式。如果路径是一个符号链接,这将影响符号链接而不是目标。请参阅chmod()的文档以获取模式的可能值。在Python 3.3中,这相当于os.chmod(path,mode,follow_symlinks = False)。
可利用:Unix。
os.lchown(path,uid,gid)
将路径的所有者和组id更改为数值uid和gid。这个函数不会遵循符号链接。在Python 3.3中,这相当于os.chown(path,uid,gid follow_symlinks = False)。
可利用:Unix。
os.link(src,dst,*,src_dir_fd=None,dst_dir_fd=None,follow_symlinks=True)
创建一个指向 src 命名为 dst 的硬链接。
这个函数可以支持指定src_dir_fd和/或dst_dir_fd来提供相对于目录描述符的路径,而不支持符号链接。
可利用:Unix,Windows。
os.listdir(path=".")
返回一个列表,其中包含路径指定的目录中的条目的名称。列表是任意顺序的,不包括特殊条目 '.' 和 '..' 即使它们存在于目录中。
path 可以是一个类路径对象。如果路径是类型字节(直接或间接地通过PathLike接口),那么返回的文件名也将是类型字节;在所有其他情况下,它们将是类型str。
该函数还可以支持指定文件描述符;文件描述符必须引用一个目录。
请注意:要将str文件名编码为字节,请使用fsencode()。
scandir() 函数的作用是返回目录项和文件属性信息,为许多常见用例提供更好的性能。
os.lstat(path,*,dir_fd=None)
在给定的路径上执行等效的lstat()系统调用。类似于stat(),但不遵循符号链接。返回一个stat_result对象。
在不支持符号链接的平台上,这是stat()的别名。
在 Python 3.3 里,这个方法相当于 os.stat(path,dir_fd=dir_fd,follow_symlinks=Fale)。
该函数还可以支持相对于目录描述符的路径。
os.mkdir(path,mode=0o777,*,dir_fd=None)
用数字模式模式创建一个名为path的目录。
如果目录已经存在,报错 FileExistsError。
在有些系统里,mode 被忽略。当使用时,当前的umask值首先被屏蔽。如果设置了其他9(即模式的八进制表示的最后3个数字),那么它们的含义是平台相关的。在某些平台上,它们被忽略,您应该调用chmod()来设置它们。
该函数还可以支持相对于目录描述符的路径。
也可以创建临时目录;查看 tempfile 模块的 tempfile.mkdtemp() 函数。
os.makedirs(name,mode=0o777,exist_ok=False)
递归目录创建函数。与mkdir()类似,但是使所有的中间级目录都需要包含叶子目录。
mode 参数传递给 mkdir();请参见 mkdir() 描述如何解释它。
如果 exist_ok 是 False,当目标目录存在时抛出 OSError。
注意:如果路径元素包含 pardir(例如 "..",在 UNIX 系统),makedirs() 将变得混乱。
该函数正确处理UNC路径。
os.mkfifo(path,mode-0o666,*,dir_fd=None)
用数字模式模式创建一个名为path的FIFO(一个命名管道)。当前的umask值首先从模式中屏蔽。
该函数还可以支持相对于目录描述符的路径。
FIFOs是可以像普通文件一样访问的管道。FIFOs一直存在,直到被删除(例如,os.unlink())。一般来说,FIFOs被用作“客户端”和“服务器”类型进程之间的集合:服务器打开FIFO进行读取,客户端打开它进行写入。注意mkfifo()不打开FIFO——它只创建了会合点。
可利用:Unix。
os.mknod(path,mode=0o600,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,设备定义了新创建的设备专用文件(可能使用了os.makedev()),否则它将被忽略。
该函数还可以支持相对于目录描述符的路径。
可利用:Unix。
os.major(device)
从原始设备号(通常是st_dev或st_rdev字段)中提取设备的主要编号。
os.minor(device)
从原始设备号(通常是st_dev或st_rdev字段)中提取设备的次要编号。
os.makedev(major,minor)
从主要和次要的设备编号组成一个原始设备编号。
os.pathconf(path,name)
返回与命名文件相关的系统配置信息。名称指定要检索的配置值;它可能是一个字符串,它是定义系统值的名称;这些名称是在许多标准中指定的(POSIX.1、Unix 95、Unix 98等)。一些平台还定义了其他名称。在 pathconf_name s字典中给出了主机操作系统已知的名称。对于不包含在映射中的配置变量,也可以通过传递一个整数来表示名称。
如果 name 是一个未知的字符串,抛出 ValueError。如果 name 指定的值在系统里不支持,即使它在 pathconf_names 里,一个 OSError 也会抛出,errno.EINVAL 是错误数字。
该函数可以支持指定文件描述符。
可利用: Unix。
os.pathconf_names
由 pathconf() 和 fpathconf() 接受的字典映射名称和由主机操作系统为这些名称定义的整数值。这可以用于确定系统已知的名称集。
可利用:Unix。
os.readlink(path,*,dir_fd=None)
返回表示符号链接指向的路径的字符串。结果可能是一个绝对的或相对的路径名;如果是相对的,可以使用os.path.join(os.path.dirname(path),result)将其转换为绝对路径名。
如果 path 是一个字符串对象(直接或间接通过类似路径的接口。),结果将也是了个字符串对象,调用时可能抛出 UnicodeDecodeError。如果 path 是一个字节对象(直接或间接),结果将是一个字节对象。
该函数还可以支持相对于目录描述符的路径。
可利用:Unix,Windows
os.remove(path,*,dir_fd=None)
移除(删除)path的文件,如果 path 是一个目录,抛出 OSError。使用 rmdir() 移除目录。
该函数还可以支持相对于目录描述符的路径。
在 Windows 里,试图删除正在使用的文件会引起异常;在Unix上,目录条目被删除,但是分配给文件的存储在原始文件不再使用之前是不可用的。
这个函数在语义上与 unlink() 相同。
os.removedirs(name)
删除目录递归地。像rmdir()这样的工作,除非成功删除了子目录,removedirs()会尝试依次删除path中提到的所有父目录,直到出现错误(该错误被忽略,因为它通常意味着父目录不是空的)。例如,os.removedirs('foo/bar/baz')将首先删除目录'foo/bar/baz',然后删除'foo/bar'和'foo',如果它们是空的。如果无法成功删除子目录,就会产生OSError。
os.rename(src,dst,*,src_dir_fd=None)
重命名文件或目录src到dst。如果 dst 是一个目录,抛出 OSError。在 Unix,如果 dst 存在且是一个文件,如果用户获得许可,它将被悄悄地替换。如果src和dst在不同的文件系统上,操作可能会失败。如果成功,重命名将是一个原子操作(这是一个POSIX需求)。在Windows上,如果dst已经存在,即使它是一个文件,也会提高OSError。
这个函数可以支持指定src_dir_fd和/或dst_dir_fd来提供相对于目录描述符的路径。
如果您想要跨平台覆盖目标,请使用replace()。
os.renames(old,new)
递归目录或文件重命名函数。像rename()这样的工作,除了创建新路径名需要的任何中间目录之外,首先尝试。在重命名之后,将使用
removedirs() 将对应于旧名称的最右路径段的目录删除。
注意:如果您缺少删除子目录或文件所需的权限,这个函数可能会失败。
os.replace(src,dst,*,src_fd=None,dst_dir_fd=None)
相关文章
- Django基本命令
Django基本命令 打开linux终端直接在终端中输入以下命令即可。 新建一个django project 命令:django-admin.py startproject project-nam
- 17个新手常见Python运行时错误
17个新手常见Python运行时错误 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 当初学 Python
- Python+SQLite真的有用吗?
SQLite是个很简单的数据库,一个文件就可以搞定,存储上千万行的数据也没问题,图形界面程序有很多,管理很方便,用Python可以编程操作,也很简单,一切都似乎很完美。 我导入了几千万行的数据进SQL
- os各种各样的操作系统接口
这个模块提供了一种使用操作系统相关功能的移动方式。如果您只想读取或写入一个文件,请查看open(),如果您想要操作路径,请参见操作os.path模块,如果您想要读取命令行上所有文件中的所有行,请参阅f
- 通过webpy和nginx-with-fastcgi搭建web.py
这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用 环境依赖的软件包 Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。 Webpy 0.3
随机推荐
- Django基本命令
Django基本命令 打开linux终端直接在终端中输入以下命令即可。 新建一个django project 命令:django-admin.py startproject project-nam
- 17个新手常见Python运行时错误
17个新手常见Python运行时错误 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 当初学 Python
- Python+SQLite真的有用吗?
SQLite是个很简单的数据库,一个文件就可以搞定,存储上千万行的数据也没问题,图形界面程序有很多,管理很方便,用Python可以编程操作,也很简单,一切都似乎很完美。 我导入了几千万行的数据进SQL
- os各种各样的操作系统接口
这个模块提供了一种使用操作系统相关功能的移动方式。如果您只想读取或写入一个文件,请查看open(),如果您想要操作路径,请参见操作os.path模块,如果您想要读取命令行上所有文件中的所有行,请参阅f
- 通过webpy和nginx-with-fastcgi搭建web.py
这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用 环境依赖的软件包 Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。 Webpy 0.3