os
操作系统 - 其他操作系统接口
此模块提供了一种使用与操作系统相关的功能的便携方式。如果您只想读取或写入文件,请参阅open()
,如果要操作路径,请参阅该os.path
模块,并且如果要读取命令行上所有文件中的所有行,请参阅该fileinput
模块。有关创建临时文件和目录的信息,请参阅tempfile
模块,高级文件和目录处理请参阅shutil
模块。
关于这些功能的可用性的说明:
- Python 的所有内置操作系统相关模块的设计都是这样的,只要具有相同的功能,它就使用相同的接口; 例如,该函数以相同的格式
os.stat(path)
返回有关路径的
统计信息(恰好源于 POSIX 接口)。
- 通过该
os
模块也可以使用特定操作系统特有的扩展,但使用它们当然会对可移植性构成威胁。
- “可用性:Unix”说明意味着这个函数通常在 Unix 系统上找到。它没有在特定的操作系统上声称它的存在。
- 如果没有单独说明,那么声称 “可用性:Unix” 的所有功能都支持在基于 Unix 核心的 Mac OS X上。
注意
在OSError
无效或无法访问的文件名和路径或具有正确类型但操作系统不接受的其他参数的情况下,此模块中的所有功能都会引发。
exception os.error
内置OSError
异常的别名。
os.name
导入的操作系统相关模块的名称。下列名称当前已注册:'posix'
,'nt'
,'os2'
,'ce'
,'java'
,'riscos'
。
也可以看看
sys.platform
具有更精细的粒度。os.uname()
给出系统相关的版本信息。
platform
模块提供了系统身份的详细检查。
1.工艺参数
这些功能和数据项提供信息并对当前过程和用户进行操作。
os.environ
映射
表示字符串环境对象。例如,environ['HOME']
是您的主目录(在某些平台上)的路径名,并且等同getenv("HOME")
于C.
这种映射是在os
模块首次导入时捕获的,通常在 Python 启动时作为处理的一部分site.py
。在这段时间之后对环境所做的更改不会反映到os.environ
,但通过os.environ
直接修改所做的更改除外。
如果平台支持该putenv()
功能,则该映射可用于修改环境以及查询环境。putenv()
将在修改映射时自动调用。
注意
直接调用putenv()
直接调用不会改变os.environ
,所以最好修改os.environ
。
注意
在某些平台上,包括 FreeBSD 和 Mac OS X,设置environ
可能会导致内存泄漏。请参阅系统文档putenv()
。
如果putenv()
未提供,则可以将此映射的修改副本传递给相应的流程创建功能,以使子流程使用修改后的环境。
如果平台支持该unsetenv()
功能,则可以删除此映射中的项目以取消设置环境变量。unsetenv()
当一个项目被删除从将被自动调用os.environ
,并且当所述一个pop()
或clear()
方法被调用。
改变在2.6版本:打电话时,也未设置环境变量os.environ.clear()
和os.environ.pop()
。
os.chdir(path)os.fchdir(fd)os.getcwd()
这些功能在“文件和目录”中介绍。
os.ctermid()
返回进程控制终端对应的文件名。
可用性:Unix。
os.getegid()
返回当前进程的有效组标识。这对应于当前进程中正在执行的文件上的“set id”位。
可用性:Unix。
os.geteuid()
返回当前进程的有效用户标识。
可用性:Unix。
os.getgid()
返回当前进程的实际组 ID。
可用性:Unix。
os.getgroups()
返回与当前进程关联的补充组标识的列表。
可用性:Unix。
注意
在 Mac OS X 上,getgroups()
行为与其他 Unix 平台有所不同。如果 Python 解释器是使用10.5
或更早的部署目标构建的,则getgroups()
返回与当前用户进程关联的有效组ID的列表; 此列表仅限于系统定义的条目数量(通常为16),并且可以通过调用修改(setgroups()
如果具有适当的特权)。如果使用大于的部署目标构建10.5
,则getgroups()
返回与进程的有效用户标识关联的用户的当前组访问列表; 组访问列表可能在进程的生命周期中发生变化,它不受调用的影响setgroups()
,其长度不限于16个。部署目标值MACOSX_DEPLOYMENT_TARGET
可以使用sysconfig.get_config_var()
。
os.initgroups(username, gid)
调用系统 initgroups()初始化组访问列表,其中包含指定用户名所属的所有组以及指定的组 ID。
可用性:Unix。
2.7版本的新功能。
os.getlogin()
返回在进程的控制终端上登录的用户的名称。对于大多数用途来说,使用环境变量LOGNAME
来找出用户是谁,或pwd.getpwuid(os.getuid())[0]
获取进程真实用户标识的登录名更有用。
可用性:Unix。
os.getpgid(pid)
用进程号 pid
返回进程的进程组 ID 。如果 pid
为0,则返回当前进程的进程组标识。
可用性:Unix。
2.3版本的新功能。
os.getpgrp()
返回当前进程组的 ID。
可用性:Unix。
os.getpid()
返回当前进程 ID。
可用性:Unix,Windows。
os.getppid()
返回父进程 ID。
可用性:Unix。
os.getresuid()
返回一个元组(ruid,euid,suid),表示当前进程的真实,有效和保存的用户 id。
可用性:Unix。
2.7版本的新功能。
os.getresgid()
返回一个元组(rgid,egid,sgid),表示当前进程的真实,有效和保存的组 ID。
可用性:Unix。
2.7版本的新功能。
os.getuid()
返回当前进程的真实用户 ID。
可用性:Unix。
os.getenv(varname[, value])
如果存在,则返回环境变量 varname 的值;
如果不存在,则返回值
。值
默认为None
。
可用性:最受欢迎的 Unix,Windows。
os.putenv(varname, value)
将名为 varname
的环境变量设置为字符串值
。对环境的这种变化影响开始与子进程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)
设置当前进程的有效用户标识。
可用性:Unix。
os.setgid(gid)
设置当前进程的组 ID。
可用性:Unix。
os.setgroups(groups)
将与当前进程关联的补充组
标识列表设置为组
。组
必须是一个序列,并且每个元素必须是标识组
的整数。此操作通常仅适用于超级用户。
可用性:Unix。
2.2版本中的新功能。
注意
在 Mac OS X上,组
的长度不得超过系统定义的最大有效组
ID 的最大数量,通常为16个。有关getgroups()
通过调用setgroups()可能不会返回相同组
列表的情况,请参阅文档。
os.setpgrp()
调用系统调用setpgrp()
或setpgrp(0, 0)
根据实现哪个版本(如果有)。有关语义的信息,请参阅 Unix 手册。
可用性:Unix。
os.setpgid(pid, pgrp)
调用系统调用setpgid()
以将 id 为 pid
的进程的进程组标识设置为标识为 pgrp
的进程组。有关语义的信息,请参阅 Unix 手册。
可用性:Unix。
os.setregid(rgid, egid)
设置当前进程的真实和有效的组 ID。
可用性:Unix。
os.setresgid(rgid, egid, sgid)
设置当前进程的真实,有效和保存的组 ID。
可用性:Unix。
2.7版本的新功能。
os.setresuid(ruid, euid, suid)
设置当前进程的真实,有效和保存的用户标识。
可用性:Unix。
2.7版本的新功能。
os.setreuid(ruid, euid)
设置当前进程的真实和有效的用户 ID。
可用性:Unix。
os.getsid(pid)
调用系统调用getsid()
。有关语义的信息,请参阅 Unix 手册。
可用性:Unix。
2.4版本中的新功能。
os.setsid()
调用系统调用setsid()
。有关语义的信息,请参阅 Unix 手册。
可用性:Unix。
os.setuid(uid)
设置当前进程的用户标识。
可用性:Unix。
os.strerror(code)
返回对应于错误代码
错误消息代码
。在提供未知错误编号ValueError
的情况下strerror()
返回NULL
的平台上。
可用性:Unix,Windows。
os.umask(mask)
设置当前的数字 umask 并返回先前的 umask。
可用性:Unix,Windows。
os.uname()
返回包含标识当前操作系统信息的5元组。该元组包含5个字符串:(sysname, nodename, release, version, machine)
。有些系统会将节点名截断为8个字符或导致组件; 获取主机名的更好方法是socket.gethostname()
甚至是socket.gethostbyaddr(socket.gethostname())
。
可用性:最近的 Unix 版本。
os.unsetenv(varname)
取消设置(删除)名为 varname
的环境变量。对环境的这种变化影响开始与子进程os.system()
,popen()
或fork()
和execv()
。
当unsetenv()
被支持,删除项目os.environ
被自动翻译成相应的呼叫unsetenv(
但是,调用unsetenv()
不会更新os.environ
,因此实际上最好删除项目os.environ
。
可用性:最受欢迎的 Unix,Windows。
2.文件对象创建
这些函数创建新的文件对象。(另见open()
)
os.fdopen(fd[, mode[, bufsize]])
返回连接到文件描述符fd
的打开的文件对象。该模式
与 BUFSIZE
参数的含义对应参数内置相同的open()
功能。如果fdopen()
引发异常,它会保持fd
不变(未封闭)。
可用性:Unix,Windows。
改变在2.3版本改变:当指定的模式
参数必须从现在开始与一个字母'r'
,'w'
或者'a'
,否则ValueError
提高。
在版本2.5中更改:在 Unix 上,当 mode
参数开始时'a'
,O_APPEND
标志设置在文件描述符上(fdopen()
实现已在大多数平台上执行)。
os.popen(command[, mode[, bufsize]])
通过命令
打开管道。返回值是一个打开的文件对象,连接到管道,可以根据模式
是'r'
(默认)还是可以读取或写入'w'
。BUFSIZE
参数的含义与相应的参数内置相同的open()
功能。该命令
的退出状态(以指定的格式编码wait()
)可用作close()
文件对象方法的返回值,但退出状态为零(终止无错误)时None
将返回。
可用性:Unix,Windows。
自2.6版弃用:此功能已过时。使用该subprocess
模块。特别检查用子流程模块部分替换旧功能。
版本2.0中更改:在早期版本的 Python 中,此功能在 Windows 下不可靠。这是由于使用_popen()
提供的库中的函数。较新版本的 Python 不使用 Windows 库中的破坏实现。
os.tmpfile()
返回以更新模式(w+b
)打开的新文件对象。该文件没有与其关联的目录条目,并且一旦没有文件的文件描述符就会自动删除。
可用性:Unix,Windows。
有许多不同的popen*()
函数提供了稍微不同的方法来创建子进程。
自2.6版弃用:所有popen*()
功能都已过时。使用该subprocess
模块。
对于每个popen*()
变体,如果指定了 bufsize
,则指定 I / O 管道的缓冲区大小。模式
,如果提供,应该是字符串'b'
或't'
; 在 Windows 上,需要确定文件对象是否应以二进制或文本模式
打开。模式
的默认值是't'
。
而且,对于这些变体中的每一个,在 Unix 上,cmd 都
可能是一个序列,在这种情况下,参数将直接传递给程序而无需shell干预(如同os.spawnv()
)。如果 cmd
是一个字符串,它将被传递给 shell(与之一样os.system()
)。
这些方法不能从子进程中检索退出状态。控制输入和输出流并检索返回码的唯一方法是使用subprocess
模块; 这些只在 Unix 上可用。
有关使用这些功能的可能死锁条件的讨论,请参阅流量控制问题。
os.popen2(cmd[, mode[, bufsize]])
执行 cmd
作为子进程并返回文件对象(child_stdin, child_stdout)
。
自2.6版弃用:此功能已过时。使用该subprocess
模块。特别检查用子流程模块部分替换旧功能。
可用性:Unix,Windows。
2.0版本中的新功能。
os.popen3(cmd[, mode[, bufsize]])
执行cmd
作为子进程并返回文件对象(child_stdin, child_stdout, child_stderr)
。
自2.6版弃用:此功能已过时。使用该subprocess
模块。特别检查用子流程模块部分替换旧功能。
可用性:Unix,Windows。
2.0版本中的新功能。
os.popen4(cmd[, mode[, bufsize]])
执行cmd
作为子进程并返回文件对象(child_stdin, child_stdout_and_stderr)
。
自2.6版弃用:此功能已过时。使用该subprocess
模块。特别检查用子流程模块部分替换旧功能。
可用性:Unix,Windows。
2.0版本中的新功能。
(请注意,child_stdin, child_stdout, and child_stderr
从子进程的角度来命名,所以 child_stdin
是孩子的标准输入。)
该功能也可以在popen2
使用相同名称的函数的模块中使用,但这些函数的返回值具有不同的顺序。
3.文件描述符操作
这些函数对使用文件描述符引用的 I / O 流进行操作。
文件描述符是对应于当前进程打开的文件的小整数。例如,标准输入通常是文件描述符0,标准输出是1,标准错误是2.然后为进程打开的其他文件将分配3,4,5等等。名称“文件描述符”有点欺骗性; 在Unix平台上,套接字和管道也被文件描述符引用。
fileno()
方法可用于在需要时获取与文件对象关联的文件描述符。请注意,直接使用文件描述符将绕过文件对象方法,忽略诸如内部数据缓冲等方面。
os.close(fd)
关闭文件描述符 fd
。
可用性:Unix,Windows。
注意
此函数用于低级别 I / O,并且必须将其应用于由os.open()
或返回的文件描述符pipe()
。关闭内置函数返回的“文件对象” open()
,popen()
或者fdopen()
使用或者使用它的close()
方法。
os.closerange(fd_low, fd_high)
关闭所有文件描述符,从 fd_low
(含)到 fd_high
(独占),忽略错误。相当于:
for fd in xrange(fd_low, fd_high):
try:
os.close(fd)
except OSError:
pass
可用性:Unix,Windows。
2.6版本中的新功能。
os.dup(fd)
返回文件描述符 fd
的副本。
可用性:Unix,Windows。
os.dup2(fd, fd2)
将文件描述符 fd
复制到 fd2
,必要时先关闭后者。
可用性:Unix,Windows。
os.fchmod(fd, mode)
将由 fd
给出的文件的模式
更改为数字模式
。请参阅文档以chmod()
了解可能的模式
值。
可用性:Unix。
2.6版本中的新功能。
os.fchown(fd, uid, gid)
将由 fd
给出的文件的所有者和组标识更改为数字uid
和 gid
。要使其中一个 ID 保持不变,请将其设置为-1。
可用性:Unix。
2.6版本中的新功能。
os.fdatasync(fd)
用 filedescriptor fd
强制将文件写入磁盘。不强制更新元数据。
可用性:Unix。
注意
此功能在 MacOS 上不可用。
os.fpathconf(fd, name)
返回与打开文件相关的系统配置信息。name
指定要检索的配置值; 它可能是一个字符串,它是定义的系统值的名称
; 这些名称
在许多标准(POSIX.1,Unix 95,Unix 98等)中都有详细说明。一些平台也定义了其他名称
。pathconf_names
字典中给出了主机操作系统已知的名称
。对于未包含在该映射中的配置变量,也会接受传递名称
的整数。
如果名称
是一个字符串并且未知,ValueError
则会引发。如果主机系统不支持名称
的特定值,即使它包含在内pathconf_names
,OSError
也会errno.EINVAL
为错误号引发一个值。
可用性:Unix。
os.fstat(fd)
返回文件描述符 fd 的
状态,如stat()
。
可用性:Unix,Windows。
os.fstatvfs(fd)
返回有关含有与文件描述符相关的文件的文件系统信息 FD
一样statvfs()
。
可用性:Unix。
os.fsync(fd)
用 filedescriptor fd
强制将文件写入磁盘。在 Unix 上,它调用本地fsync()
函数; 在 Windows 上,MS _commit()
功能。
如果你从一个 Python 文件对象 f 开始
,首先要做的是f.flush()
,然后这样做os.fsync(f.fileno())
,以确保与 f
相关的所有内部缓冲区都写入磁盘。
可用性:从2.2.3开始的 Unix 和 Windows。
os.ftruncate(fd, length)
截断与文件描述符 fd
相对应的文件,以使其长度
至多为长度
字节。
可用性:Unix。
os.isatty(fd)
返回True
如果文件描述符FD
是开放的,连接到一个 TTY(类似的)设备,否则False
。
os.lseek(fd, pos, how)
将文件描述符 fd
的当前位置设置为位置 pos
,修改方法
如下:SEEK_SET
或0
设置相对于文件开头的位置; SEEK_CUR
或者1
将其设置为相对于当前位置; SEEK_END
或者2
将其设置为相对于文件的结尾。从头开始,以字节为单位返回新的光标位置。
可用性:Unix,Windows。
os.SEEK_SETos.SEEK_CURos.SEEK_END
lseek()
函数的参数。它们的值分别为0,1和2。
可用性:Windows,Unix。
2.5版本中的新功能。
os.open(file, flags[, mode])
根据模式
打开文件
文件
并根据标志
和可能的模式
设置各种标志
。默认模式
是0777
(八进制),并且当前的 umask 值首先被屏蔽掉。返回新打开的文件
的文件
描述符。
有关标志和模式值的说明,请参阅C运行时文档; 标志常量(如O_RDONLY
和O_WRONLY
)也在这个模块中定义(参见open()标志常量)。特别是在Windows O_BINARY
上,需要添加以二进制模式打开文件。
可用性:Unix,Windows。
注意
此功能适用于低级别的 I / O。对于正常使用,使用内置函数open()
,该函数返回“文件对象” read()
和write()
方法(以及更多)。要将文件描述符包装在“文件对象”中,请使用fdopen()
。
os.openpty()
打开一个新的伪终端对。(master, slave)
分别为 pty
和 tty 返回一对文件描述符。对于(稍微)更便携的方法,请使用该pty
模块。
可用性:一些 Unix 的味道。
os.pipe()
创建一个管道。分别返回一对(r, w)
可用于读写的文件描述符。
可用性:Unix,Windows。
os.read(fd, n)
从文件描述符 fd 中
读取至多 n
个字节。返回包含读取字节的字符串。如果已经达到由f d
引用的文件末尾,则返回空字符串。
可用性:Unix,Windows。
注意
此函数用于低级别 I / O,并且必须将其应用于由os.open()
或返回的文件描述符pipe()
。读取由内置函数返回的“文件对象”,open()
或者通过popen()
或fdopen()
,或sys.stdin
使用其read()
或readline()
方法来读取。
os.tcgetpgrp(fd)
返回与 fd
给出的终端关联的进程组(由返回的开放文件描述符os.open()
)。
可用性:Unix。
os.tcsetpgrp(fd, pg)
将与由 fd
(打开的文件描述符返回的os.open()
)给出的终端关联的进程组设置为pg
。
Availability: Unix.
os.ttyname(fd)
返回一个字符串,指定与文件描述符fd
关联的终端设备。如果 fd
未与终端设备关联,则会引发异常。
可用性:Unix。
os.write(fd, str)
将字符串 str
写入文件描述符 fd
。返回实际写入的字节数。
可用性:Unix,Windows。
注意
此函数用于低级别 I / O,并且必须将其应用于由os.open()
或返回的文件描述符pipe()
。要编写由内置函数返回一个“文件对象” open()
或popen()
或fdopen()
或sys.stdout
或sys.stderr
,使用它的write()
方法。
3.1。open()标志常量
以下常量是函数的 flags
参数的选项open()
。它们可以使用按位或运算符进行组合|
。其中一些不适用于所有平台。有关它们的可用性和使用的说明,请参阅 Unix上的open(2)
手册页或 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_NOCTTY
上述常量仅在 Unix 上可用。
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_SHLOCKos.O_EXLOCK
上述常量是扩展名,如果它们没有被 C 库定义,则不存在。
4.文件和目录
os.access(path, mode)
使用真正的 uid / gid 来测试对路径的
访问。请注意,大多数操作将使用有效的 uid / gid,因此可以在 suid / sgid 环境中使用此例程来测试调用用户是否具有指定的路径
访问权限。模式
应该是F_OK
来测试是否存在路径
,或者它可以是包容性的 OR 的一种或多种的R_OK
,W_OK
和X_OK
测试权限。True
如果访问被允许,False
则返回,如果不是。有关更多信息,请参阅Unix手册页访问权限(2)
。
可用性:Unix,Windows。
注意
使用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 IOError as e:
if e.errno == errno.EACCES:
return "some default data"
# Not a permission error.
raise
else:
with fp:
return fp.read()
注意
即使access()
指示它们会成功,I / O 操作也可能失败,特别是对于可能具有超出通常 POSIX 许可位模型的权限语义的网络文件系统的操作。
os.F_OK
值作为模式
参数传递access()
以测试路径
的存在。
os.R_OK
要包含在模式
参数中access()
以测试路径
的可读性的值。
os.W_OK
值包含在模式
参数中access()
以测试路径
的可写性。
os.X_OK
要包含在模式
参数中access()
以确定是否可以执行路径的
值。
os.chdir(path)
将当前工作目录更改为路径
。
可用性:Unix,Windows。
os.fchdir(fd)
将当前工作目录更改为由文件描述符 fd
表示的目录。描述符必须引用打开的目录,而不是打开的文件。
可用性:Unix。
2.3版本的新功能。
os.getcwd()
返回表示当前工作目录的字符串。
可用性:Unix,Windows。
os.getcwdu()
返回表示当前工作目录的 Unicode 对象。
可用性:Unix,Windows。
2.3版本的新功能。
os.chflags(path, 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
Availability: Unix.
2.6版本中的新功能。
os.chroot(path)
将当前进程的根目录更改为路径
。可用性:Unix。
2.2版本中的新功能。
os.chmod(path, mode)
将路径
的模式
更改为数字模式
。模式
可能会采用以下值之一(如stat
模块中定义的)或它们的按位或运算组合:
stat.S_ISUID
stat.S_ISGID
stat.S_ENFMT
stat.S_ISVTX
stat.S_IREAD
stat.S_IWRITE
stat.S_IEXEC
stat.S_IRWXU
stat.S_IRUSR
stat.S_IWUSR
stat.S_IXUSR
stat.S_IRWXG
stat.S_IRGRP
stat.S_IWGRP
stat.S_IXGRP
stat.S_IRWXO
stat.S_IROTH
stat.S_IWOTH
stat.S_IXOTH
可用性:Unix,Windows。
注意
虽然 Windows 支持chmod()
,但只能用它设置文件的只读标志(通过stat.S_IWRITE
和stat.S_IREAD
常量或相应的整数值)。所有其他位都被忽略。
os.chown(path, uid, gid)
将路径
的所有者和组标识更改为数字 uid
和 gid
。要使其中一个 ID 保持不变,请将其设置为-1。
可用性:Unix。
os.lchflags(path, flags)
设置的标志
路径
的数字标志
,如chflags()
,但不遵循符号链接。
可用性:Unix。
2.6版本中的新功能。
os.lchmod(path, mode)
将路径
的模式
更改为数字模式
。如果 path 是符号链接,则会影响符号链接而不是目标。请参阅文档以chmod()
了解可能的模式
值。
可用性:Unix。
2.6版本中的新功能。
os.lchown(path, uid, gid)
将路径
的所有者和组标识更改为数字 uid
和 gid
。此功能不会遵循符号链接。
可用性:Unix。
2.3版本的新功能。
os.link(source, link_name)
创建指向源
名为 link_name
的硬链接。
可用性:Unix。
os.listdir(path)
返回包含路径
给定目录中条目名称的列表。该列表以任意顺序排列。它不包含特殊条目'.'
,'..'
即使它们存在于目录中。
可用性:Unix,Windows。
版本2.3中更改:在 Windows NT / 2k / XP 和 Unix 上,如果 path
是一个 Unicode 对象,则结果将是一个 Unicode 对象列表。不可解码的文件名仍将作为字符串对象返回。
os.lstat(path)
lstat()
在给定的路径上执行等价的系统调用。类似于stat()
,但不遵循符号链接。在不支持符号链接的平台上,这是一个别名stat()
。
os.mkfifo(path[, mode])
使用数字模式
模式
创建一个名为 path
的 FIFO(一个命名管道)。默认模式
是0666
(八进制)。首先将当前的 umask 值从模式
中屏蔽掉。
可用性:Unix。
FIFO 是可以像普通文件一样访问的管道。FIFO 存在,直到它们被删除(例如os.unlink()
)。通常,FIFO 被用作“客户端”和“服务器”类型进程之间的交会点:服务器打开 FIFO 进行读取,客户端打开它进行写入。请注意,mkfifo()
不会打开 FIFO - 它只会创建会合点。
os.mknod(filename[, mode=0600[, device=0]])
创建一个名为 filename
的文件系统节点(文件,设备
专用文件或命名管道)。模式
同时指定要使用的权限以及要创建的节点的类型,被组合(按位 OR)与一个stat.S_IFREG
,stat.S_IFCHR
,stat.S_IFBLK
,和stat.S_IFIFO
(这些常数是在可用的stat
)。对于stat.S_IFCHR
和stat.S_IFBLK
,设备
定义新创建的设备
专用文件(可能使用os.makedev()
),否则将被忽略。
2.3版本的新功能。
os.major(device)
从原始设备号码(通常是st_dev
或st_rdev
来自stat
)中提取设备主号码。
2.3版本的新功能。
os.minor(device)
从原始设备号码(通常是st_dev
或st_rdev
来自stat
)中提取设备次要号码。
2.3版本的新功能。
os.makedev(major, minor)
从主要和次要设备编号构成原始设备编号。
2.3版本的新功能。
os.mkdir(path[, mode])
使用数字模式
模式
创建一个名为 path
的目录。默认模式
是0777OS
(八进制)。如果该目录已经存在,则引发Error
。
在某些系统上,模式
被忽略。在使用它的地方,当前的 umask 值首先被屏蔽掉。如果除了最后9位(即模式
的八进制表示的最后3位数)被设置,它们的含义是平台相关的。在某些平台上,它们被忽略,你应该chmod()
明确地调用它们来设置它们。
也可以创建临时目录; 看tempfile
模块的tempfile.mkdtemp()
功能。
可用性:Unix,Windows。
os.makedirs(path[, mode])
递归目录创建功能。像mkdir()
,但是使所有需要包含叶目录的中级目录。error
如果叶目录已存在或无法创建,则引发异常。默认模式
是0777
(八进制)。
所述模式
参数被传递给mkdir(
请参阅mkdir()说明以了解它的解释。
注意
makedirs()
如果要创建的路径元素包含在内,将会变得混乱os.pardir
。
1.5.2版本的新功能。
版本2.3中更改:此功能现在正确处理 UNC 路径。
os.pathconf(path, name)
返回与指定文件相关的系统配置信息。name
指定要检索的配置值; 它可能是一个字符串,它是定义的系统值的名称
; 这些名称
在许多标准(POSIX.1,Unix 95,Unix 98等)中都有详细说明。一些平台也定义了其他名称
。pathconf_names
字典中给出了主机操作系统已知的名称
。对于未包含在该映射中的配置变量,也会接受传递名称
的整数。
如果名称
是一个字符串并且未知,ValueError
则会引发。如果主机系统不支持名称
的特定值,即使它包含在内pathconf_names
,OSError
也会errno.EINVAL
为错误号引发一个值。
可用性:Unix。
os.pathconf_names
字典映射名通过接受pathconf()
和fpathconf()
用于通过主机操作系统这些名称定义的整数值。这可以用来确定系统已知的一组名称。可用性:Unix。
os.readlink(path)
返回表示符号链接指向的路径的字符串。结果可能是绝对路径名或相对路径名; 如果它是相对的,则可以使用它转换为绝对路径名os.path.join(os.path.dirname(path), result)
。
在版本2.6中更改:如果路径
是 Unicode 对象,则结果也将是 Unicode 对象。
可用性:Unix。
os.remove(path)
删除(删除)文件路径
。如果路径
是目录,OSError
则引发; 请参阅rmdir()
下面的删除目录。这与unlink()
下面介绍的功能相同。在 Windows 上,尝试删除正在使用的文件会导致引发异常; 在Unix上,目录条目被删除,但分配给该文件的存储不可用,直到原始文件不再被使用。
可用性:Unix,Windows。
os.removedirs(path)
递归地删除目录。像rmdir()
除了如果叶目录被成功删除之外的工作,removedirs()
试图连续删除路径中
提到的每个父目录,直到引发错误(忽略,因为它通常意味着父目录不是空的)。例如,os.removedirs('foo/bar/baz')
将首先删除该目录'foo/bar/baz'
,然后删除'foo/bar'
,'foo'
如果它们是空的。OSError
如果叶子目录无法成功删除则引发。
1.5.2版本的新功能。
os.rename(src, dst)
将文件或目录 src
重命名为 dst
。如果 dst
是一个目录,OSError
将会被提出。在 Unix 上,如果 dst
存在并且是一个文件,那么如果用户有权限,它将被静默地替换。如果 src
和 dst
位于不同的文件系统上,该操作可能会在某些 Unix 版本上失败。如果成功,重命名将是一个原子操作(这是 POSIX 要求)。在 Windows 上,如果 dst
已经存在,OSError
即使它是文件也会被提升; 当 dst
命名现有文件时,可能无法实现原子重命名。
可用性:Unix,Windows。
os.renames(old, new)
递归目录或文件重命名功能。像rename()
创建新路径名所需的任何中间目录都是首先尝试的那样工作。重命名后,将使用旧的名称的最右边路径段对应的目录removedirs()
。
1.5.2版本的新功能。
注意
如果您缺少删除叶子目录或文件所需的权限,则此功能可能会失败,并生成新的目录结构。
os.rmdir(path)
删除(删除)目录路径
。仅当目录为空时才起作用,否则OSError
会引发。为了移除整个目录树,shutil.rmtree()
可以使用。
可用性:Unix,Windows。
os.stat(path)
stat()
在给定的路径上执行等价的系统调用。(该函数遵循符号链接;用于统计符号链接的使用lstat()
。)
返回值是一个对象,其属性对应于stat
结构的成员,即:
st_mode
- 保护位,
st_ino
- inode 号码,
st_dev
- 设备,
st_nlink
- 硬链接的数量,
st_uid
- 所有者的用户标识,
st_gid
- 所有者的组 ID,
st_size
- 文件大小,以字节为单位,
st_atime
- 最近访问的时间,
st_mtime
- 最近一次内容修改的时间,
st_ctime
- 平台依赖; Unix 上最新的元数据更改时间或 Windows 上的创建时间)
在版本2.3中更改:如果stat_float_times()
返回True
,则时间值为浮点数,测量秒数。如果系统支持,则可以报告一秒钟的分数。请参阅stat_float_times()
进一步的讨论。
在某些 Unix 系统(如 Linux)上,以下属性也可能可用:
st_blocks
- 分配给文件的512字节块的数量
st_blksize
- 用于高效文件系统 I / O 的文件系统块大小
st_rdev
- 如果是 inode 设备,则为设备类型
st_flags
- 文件的用户定义标志
在其他 Unix 系统上(例如 FreeBSD),下列属性可能是可用的(但只有在root尝试使用时才可以填写):
st_gen
- 文件生成号码
st_birthtime
- 文件创建的时间
在 RISCOS 系统上,以下属性也可用:
st_ftype
(文件类型)
st_attrs
(属性)
st_obtype
(对象类型)。
注意
确切含义和分辨率st_atime
,st_mtime
以及st_ctime
属性取决于操作系统和文件系统上。例如,在使用 FAT 或 FAT32 文件系统的 Windows 系统上,st_mtime
具有2秒的分辨率,并且st_atime
仅具有1天的分辨率。详细信息请参阅您的操作系统文档。
为了向后兼容,的返回值stat()
也为至少10点的整数给出的最重要的(便携式)成员的元组可访问的stat
结构中,在顺序st_mode
,st_ino
,st_dev
,st_nlink
,st_uid
,st_gid
,st_size
,st_atime
,st_mtime
,st_ctime
。一些实现可能会在最后添加更多项目。
标准模块stat
定义了用于从stat
结构中提取信息的函数和常量。(在Windows上,有些项目填充虚拟值。)
示例:
>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511, 769, 1, 1032, 100, 926, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926
可用性:Unix,Windows。
在版本2.2中进行了更改:增加了对值的访问,作为返回对象的属性。
在版本2.5中更改:添加st_gen
和st_birthtime
。
os.stat_float_times([newvalue])
确定是否stat_result
将时间戳记表示为浮动对象。如果 newvalue
是True
,则将来的调用stat()
返回 float,如果是False
,则将来的调用返回 int。如果省略了newvalue
,则返回当前设置。
为了与较老的 Python 版本兼容,stat_result
作为元组访问总是返回整数。
在版本2.5中进行了更改:默认情况下,Python 现在返回浮点值。无法正确使用浮点时间戳的应用程序可以使用此功能来恢复旧的行为。
时间戳的分辨率(即可能的最小分数)取决于系统。有些系统仅支持第二种解决方案 在这些系统上,分数将始终为零。
建议此设置仅在程序启动时在___main___模块中更改; 图书馆不应该改变这个设置。如果应用程序使用工作不正确的库(如果处理了浮点时间戳记),则此应用程序应关闭此功能,直到库更正为止。
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
。
为了向后兼容,返回值也可以按照上面给出的顺序作为其值与这些属性相对应的元组来访问。标准模块statvfs
定义了一些常量,这些常量对于从statvfs
结构中提取信息时是很有用的 在编写需要与不支持将字段作为属性访问的 Python 版本一起工作的代码时,这仍然很有用。
可用性:Unix。
在版本2.2中进行了更改:增加了对值的访问,作为返回对象的属性。
os.symlink(source, link_name)
创建一个指向源
名为 link_name
的符号链接。
可用性:Unix。
os.tempnam([dir[, prefix]])
返回一个可用于创建临时文件的唯一路径名称。这将是一个绝对路径,用于命名目录dir中
的潜在目录条目,或者如果省略dir,
则为临时文件的公共位置None
。如果给定而不是None
,前缀
用于为文件名提供一个简短的前缀
。应用程序负责正确地创建和管理使用返回的路径创建的文件tempnam(
没有提供自动清理。在Unix上,环境变量TMPDIR覆盖
目录,而
在Windows TMP上使
用。这个函数的具体行为取决于C库的实现; 有些方面在系统文档中没有详细说明。
警告
使用tempnam()
易受符号链接攻击; 考虑使用tmpfile()
(部分文件对象创建)。
可用性:Unix,Windows。
os.tmpnam()
返回一个可用于创建临时文件的唯一路径名称。这将是一个绝对路径,它将临时文件的公共位置中的潜在目录条目命名。应用程序负责正确地创建和管理使用返回的路径创建的文件tmpnam(
没有提供自动清理。
警告
使用tmpnam()
易受符号链接攻击; 考虑使用tmpfile()
(部分文件对象创建)。
可用性:Unix,Windows。不过,这个函数可能不应该在 Windows 上使用:微软的实现tmpnam()
总是在当前驱动器的根目录中创建一个名称,而这通常是临时文件的一个不好的位置(取决于特权,您甚至可能不能使用这个名字打开一个文件)。
os.TMP_MAX
tmpnam()
重用名称前将生成的唯一名称的最大数量。
os.unlink(path)
删除(删除)文件路径
。这与功能相同remove(
unlink()名称
是其传统的Unix名称。
可用性:Unix,Windows。
os.utime(path, times)
设置路径
指定文件的访问和修改时间
。如果时间
是None
,那么文件的访问和修改时间
被设置为当前时间
。(效果类似于在路径
上运行 Unix 程序 touch
。)否则,时间
必须(atime, mtime)
是用于分别设置访问和修改时间
的形式的数字的二元组。是否为路径
指定目录取决于操作系统是否将目录实现为文件(例如Windows不)。请注意,您在此处设置的确切时间
可能不会被后续返回stat()
调用,具体取决于操作系统记录访问和修改时间
的分辨率; 见stat()
。
版本2.0中更改:增加了None
对时间的
支持。
可用性:Unix,Windows。
os.walk(top, topdown=True, onerror=None, followlinks=False)
通过自顶向下或自底向上走树来生成目录树中的文件名。对于根目录顶部
(包括顶部
本身)树中的每个目录,它会生成一个3元组(dirpath, dirnames, filenames)
。
dirpath
是一个字符串,即目录的路径。dirnames 中
是子目录的名称列表中的 dirpath
(不包括'.'
和'..'
)。文件名
是dirpath
中非目录文件名
称的列表。请注意,列表中的名称不包含路径组件。要获得完整路径(从顶部
开始)到 dirpath 中
的文件或目录,请执行os.path.join(dirpath, name)
。
如果可选参数 topdown
被True
指定或未指定,则目录的三元组在其任何子目录(自上而下
生成目录)的三元组之前生成。如果自上而下的
是False
,其所有子目录的三元组(目录生成由下而上)后三的目录中生成。无论 topdown
的值如何,子目录的列表都会在目录及其子目录的元组生成之前检索。
当自上而下的
是True
,来电者可以修改 dirnames 中
就地列表(可能使用del
或切片分配),并且walk()
只会递归到他们的名字留在子目录dirnames中
; 这可以用来修剪搜索,强制访问的特定顺序,甚至可以通知walk()
调用者在walk()
再次恢复之前创建或重命名的目录。修改 dirnames 中
,当自上而下的
就是False
对行走的行为没有影响,因为在自下而上的模式在目录 dirnames 中
被之前生成 dirpath
生成本身。
默认情况下,来自listdir()
调用的错误将被忽略。如果指定了可选参数 onerror
,它应该是一个函数; 它将被调用一个参数,一个OSError
实例。它可以报告错误以继续步行,或者提出异常以中止步行。请注意,文件名可用作filename
异常对象的属性。
默认情况下,walk()
不会走向解析为目录的符号链接。设置 followlinks
来True
访问目录指向符号链接,在支持它们的系统。
2.6版新增功能:followlinks
参数。
注意
请注意,设置 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",
print sum(getsize(join(root, name)) for name in files),
print "bytes in", len(files), "non-directory files"
if 'CVS' in dirs:
dirs.remove('CVS') # don't visit CVS directories
在下一个示例中,从下往上走树是非常重要的:rmdir()
不允许在目录为空之前删除目录:
# Delete everything reachable from the directory named in "top",
# assuming there are no symbolic links.
# CAUTION: This is dangerous! For example, if top == '/', it
# could delete all your disk files.
import os
for root, dirs, files 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))
2.3版本的新功能。
5.过程管理
这些功能可用于创建和管理进程。
各种exec*
函数为加载到进程中的新程序提供参数列表。在每种情况下,这些参数中的第一个将作为自己的名称传递给新程序,而不是作为用户可能在命令行上输入的参数。对于 C 程序员来说,这是argv[0]
传递给程序的main()
。例如,os.execv('/bin/echo', ['foo', 'bar'])
只能bar
在标准输出上打印; foo
似乎会被忽略。
os.abort()
SIGABRT
为当前进程生成一个信号。在 Unix 上,默认行为是产生核心转储;在 Windows 上,该进程立即返回一个退出代码3
。请注意,调用此函数将不要求注册的 Python 的信号处理SIGABRT
用signal.signal()
。
可用性:Unix,Windows。
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*
。
exec*
函数的“l”和“v”变体在传递命令行参数方面有所不同。如果在编写代码时参数的数量是固定的,则“l”变体可能是最容易使用的变体; 各个参数只是成为execl*()
功能的附加参数。当参数的数量是可变的时,“v”变体是好的,参数以列表或元组作为 args
参数传递。在任何一种情况下,子进程的参数都应以正在运行的命令的名称开始,但这不是强制执行的。
其中包括一个“P”附近的端部(所述变体execlp()
,execlpe()
,execvp()
,和execvpe()
)将使用PATH
环境变量定位程序文件
。当环境被替换时(使用exec*e
下一段讨论的变体之一),新环境被用作PATH
变量的来源。其他变体,execl()
,execle()
,execv()
,和execve()
,将不使用的PATH
变量定位可执行程序; 路径
必须包含适当的绝对或相对路径
。
为execle()
,execlpe()
,execve()
,和execvpe()
(注意,在“e”的这些所有端),则 ENV
参数必须被用于定义新处理的环境变量(这些被用来代替当前进程的环境)的映射; 功能execl()
,execlp()
,execv()
,以及execvp()
所有会导致新进程继承当前进程的环境。
可用性:Unix,Windows。
os._exit(n)
退出状态为 n
的进程,无需调用清理处理程序,刷新 stdio 缓冲区等。
可用性:Unix,Windows。
注意
标准的退出方式是sys.exit(n)
。_exit()
通常应该只在子过程之后才能使用fork()
。
以下退出代码已定义并可用于_exit()
,但它们不是必需的。这些通常用于以 Python 编写的系统程序,例如邮件服务器的外部命令传递程序。
注意
其中一些可能不适用于所有的 Unix 平台,因为有一些变化。这些常量被定义在底层平台所定义的位置。
os.EX_OK
退出代码意味着没有发生错误。
可用性:Unix。
2.3版本的新功能。
os.EX_USAGE
退出代码意味着命令被错误地使用,例如给出错误的参数数量。
可用性:Unix。
2.3版本的新功能。
os.EX_DATAERR
退出代码意味着输入数据不正确。
可用性:Unix。
2.3版本的新功能。
os.EX_NOINPUT
退出代码意味着输入文件不存在或不可读。
可用性:Unix。
2.3版本的新功能。
os.EX_NOUSER
退出代码,意味着指定的用户不存在。
可用性:Unix。
2.3版本的新功能。
os.EX_NOHOST
退出代码,意味着指定的主机不存在。
可用性:Unix。
2.3版本的新功能。
os.EX_UNAVAILABLE
退出代码,这意味着所需的服务不可用。
可用性:Unix。
2.3版本的新功能。
os.EX_SOFTWARE
退出代码意味着检测到内部软件错误。
可用性:Unix。
2.3版本的新功能。
os.EX_OSERR
退出代码意味着检测到操作系统错误,例如无法分叉或创建管道。
可用性:Unix。
2.3版本的新功能。
os.EX_OSFILE
退出代码意味着某些系统文件不存在,无法打开或出现其他类型的错误。
可用性:Unix。
2.3版本的新功能。
os.EX_CANTCREAT
退出代码意味着无法创建用户指定的输出文件。
可用性:Unix。
2.3版本的新功能。
os.EX_IOERR
退出代码意味着在某个文件上执行 I / O 时发生错误。
可用性:Unix。
2.3版本的新功能。
os.EX_TEMPFAIL
退出代码意味着发生了临时故障。这表示可能不是真正的错误,例如在重试操作期间无法建立的网络连接。
可用性:Unix。
2.3版本的新功能。
os.EX_PROTOCOL
退出代码意味着协议交换是非法的,无效的或不被理解的。
可用性:Unix。
2.3版本的新功能。
os.EX_NOPERM
退出代码意味着没有足够的权限执行操作(但不适用于文件系统问题)。
可用性:Unix。
2.3版本的新功能。
os.EX_CONFIG
退出代码意味着发生某种配置错误。
可用性:Unix。
2.3版本的新功能。
os.EX_NOTFOUND
退出代码意味着类似“未找到条目”。
可用性:Unix。
2.3版本的新功能。
os.fork()
叉一个孩子的过程。返回0
孩子和父母的孩子的进程 ID。如果发生错误OSError
。
请注意,从线程使用 fork()时,包括 FreeBSD <= 6.3,Cygwin 和 OS / 2 EMX 在内的一些平台已知问题。
警告
请参阅ssl
使用 fork()使用 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
。Windows 版本kill()
还需要处理句柄才能被杀死。
2.7版本的新功能:Windows 支持
os.killpg(pgid, sig)
将信号 sig
发送到进程组 pgid
。
可用性:Unix。
2.3版本的新功能。
os.nice(increment)
为流程的“好” 添加增量
。回报新的美好。
可用性:Unix。
os.plock(op)
将程序段锁定到内存中。op(定义于<sys/lock.h>)的值确定哪些段被锁定。
可用性:Unix。
os.popen(...)os.popen2(...)os.popen3(...)os.popen4(...)
运行子进程,返回打开的管道进行通信。这些功能在“文件对象创建”一节中介绍。
os.spawnl(mode, path, ...)os.spawnle(mode, path, ..., env)os.spawnlp(mode, file, ...)os.spawnlpe(mode, file, ..., env)os.spawnv(mode, path, args)os.spawnve(mode, path, args, env)os.spawnvp(mode, file, args)os.spawnvpe(mode, file, args, env)
在新进程中执行程序路径
。
(请注意,subprocess
模块提供了更强大的工具来生成新进程并检索其结果;使用该模块比使用这些函数更可取,尤其要检查使用子进程模块部分替换旧函数。)
如果模式
是P_NOWAIT
,这个函数返回新进程的进程 ID; 如果模式
是P_WAIT
,返回进程的退出代码,如果它正常退出,或者-signal
,信号
是杀死进程的信号
。在Windows上,进程 ID 实际上是进程句柄,因此可以与该waitpid()
函数一起使用。
spawn*
函数的“l”和“v”变体在传递命令行参数方面有所不同。如果在编写代码时参数的数量是固定的,则“l”变体可能是最容易使用的变体; 各个参数只是成为spawnl*()
功能的附加参数。当参数的数量是可变的时,“v”变体是好的,参数以列表或元组作为 args
参数传递。无论哪种情况,子进程的参数都必须以正在运行的命令的名称开始。
其中包括一个第二“p”的附近的端部(所述变体spawnlp()
,spawnlpe()
,spawnvp()
,和spawnvpe()
)将使用PATH
环境变量定位程序文件
。当环境被替换时(使用spawn*e
下一段讨论的变体之一),新环境被用作PATH
变量的来源。其他变体,spawnl()
,spawnle()
,spawnv()
,和spawnve()
,将不使用的PATH
变量定位可执行程序; 路径
必须包含适当的绝对或相对路径
。
为spawnle()
,spawnlpe()
,spawnve()
,和spawnvpe()
(注意,在“E”这些所有端),则 ENV
参数必须被用于定义新处理的环境变量的映射(它们被用来代替当前进程的环境中); 功能spawnl()
,spawnlp()
,spawnv()
,以及spawnvp()
所有会导致新进程继承当前进程的环境。请注意,env
字典中的键和值必须是字符串; 无效的键或值将导致函数失败,返回值为127
。
作为一个例子,下面的调用spawnlp()
和spawnvpe()
是等效的:
import os
os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')
L = ['cp', 'index.html', '/dev/null']
os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)
可用性:Unix,Windows。spawnlp()
,spawnlpe()
,spawnvp()
而spawnvpe()
不是 Windows 上可用。spawnle()
并且spawnve()
在 Windows 上不是线程安全的; 我们建议您改用该subprocess
模块。
1.6版新增功能
os.P_NOWAITos.P_NOWAITO
功能族的模式
参数的可能值spawn*
。如果给出了这些值中的任何一个,那么spawn*()
函数将在创建新进程后立即返回,并将进程 ID 作为返回值。
可用性:Unix,Windows。
1.6版新增功能
os.P_WAIT
函数族的模式
参数的可能值spawn*
。如果这是以模式
形式给出的,那么这些spawn*()
函数将不会返回,直到新进程运行完成并且将返回运行成功的进程的退出代码,或者-signal
信号终止进程。
可用性:Unix,Windows。
1.6版新增功能
os.P_DETACHos.P_OVERLAY
功能族的模式
参数的可能值spawn*
。这些便携式比上面列出的便携式更少。P_DETACH
类似于P_NOWAIT
,但是新进程从调用进程的控制台分离。如果P_OVERLAY
使用,则当前进程将被替换; 该spawn*()
函数不会返回。
可用性:Windows。
1.6版新增功能
os.startfile(path[, operation])
用相关的应用程序启动一个文件。
当没有指定操作时
'open'
,它的作用就像在 Windows 资源管理器中双击文件一样,或者将文件名作为参数传递给交互式命令 shell 中的 start
命令:文件以任何应用程序(如果有)的扩展名打开已关联的。
当给出另一个操作时
,它必须是一个“命令动词”,它指定了该文件应该做什么。Microsoft 记录的常见动词是'print'
和'edit'
(用于文件)以及'explore'
和'find'
(用于目录)。
startfile()
相关应用程序启动后立即返回。没有选项可以等待应用程序关闭,也无法检索应用程序的退出状态。该路径
参数是相对于当前目录。如果你想使用绝对路径
,确保第一个字符不是斜线('/'
); 底层的 Win32 ShellExecute()
函数不起作用,如果是。使用该os.path.normpath()
函数确保路径
为 Win32 正确编码。
可用性:Windows。
2.0版本中的新功能。
版本2.5中的新功能:操作
参数。
os.system(command)
在子 shell 中执行命令(一个字符串)。这是通过调用标准 C 函数来实现的system()
,并且具有相同的限制。sys.stdin
执行的命令的环境中不会反映更改等。
在 Unix 上,返回值是以指定格式编码的进程的退出状态wait()
。请注意,POSIX 没有指定C system()
函数的返回值的含义,所以 Python 函数的返回值是依赖于系统的。
在 Windows 上,返回值是由 Windows 环境变量给出的运行命令
之后由系统 shell 返回的值COMSPEC
:在 command.com
系统(Windows 95,98 和 ME)上始终如此0
; 在 cmd.exe
系统上(Windows NT,20
0
0
和XP),这是命令
运行的退出状态; 在使用非本地 shell 的系统上,请查阅您的 shell 文档。
subprocess
模块提供了更强大的功能,用于产生新过程并检索其结果; 使用该模块优于使用此功能。有关subprocess
一些有用的配方,请参阅文档中的“使用子流程模块”一节中的“替换旧功能”一节。
可用性:Unix,Windows。
os.times()
以秒为单位返回指示累计(处理器或其他)时间的浮点数的5元组。这些项目是:用户时间,系统时间,儿童用户时间,儿童系统时间以及自过去的固定点开始的已用实时时间。请参阅 Unix 手册页次(2)
或相应的 Windows 平台 API 文档。在 Windows 上,只有前两项填充,其他则为零。
可用性:Unix,Windows
os.wait()
等待子进程完成,并返回一个包含它的 pid 和退出状态指示的元组:一个16位数字,其低字节是杀死进程的信号编号,其高字节是退出状态(如果信号数字为零); 如果生成核心文件,则设置低字节的高位。
可用性:Unix。
os.waitpid(pid, options)
这个功能的细节在 Unix 和 Windows 上有所不同。
在 Unix 上:等待由进程标识符 pid
给出的子进程的完成,并返回包含进程标识符和退出状态指示(编码为wait()
)的元组。调用的语义受整数选项
值的影响,这些选项
应该0
用于正常操作。
如果 pid
大于0
,则waitpid()
请求该特定进程的状态信息。如果 pid
是0
,则请求是针对当前进程的进程组中的任何子进程的状态。如果 pid
是-1
,则该请求适用于当前进程的任何孩子。如果 pid
小于-1
,则为进程组中的任何进程请求状态-pid
(pid
的绝对值)。
一个OSError
是提出了与 errno 的值时,系统调用返回-1。
在 Windows 上:等待进程句柄 pid
给出的进程完成,并返回包含 pid
的元组,并且其退出状态左移8位(移位使得跨平台使用该函数更容易)。一个 PID
小于或等于0
已经在 Windows 上没有特殊的意义,并提出了一个例外。整数选项
的值不起作用。pid
可以指任何已知 id 的进程,不一定是子进程。spawn*
调用的函数P_NOWAIT
返回适当的进程句柄。
os.wait3(options)
与之类似waitpid()
,除了没有给出进程 ID 参数,并返回包含子进程 ID,退出状态指示和资源使用信息的3元素元组。参考resource
。getrusage()
有关资源使用信息的详细信息。选项参数与提供给waitpid()
和的参数相同wait4()
。
可用性:Unix。
2.5版本中的新功能。
os.wait4(pid, options)
与waitpid()
包含子进程 ID,退出状态指示和资源使用信息的3元素元组类似,返回。参考resource
。getrusage()
有关资源使用信息的详细信息。参数wait4()
与提供的参数相同waitpid()
。
可用性:Unix。
2.5版本中的新功能。
os.WNOHANG
waitpid()
立即没有子进程状态时立即返回的选项。(0, 0)
在这种情况下函数返回。
可用性:Unix。
os.WCONTINUED
此选项会导致子进程在自上次报告状态后已从作业控制停止继续进行报告。
可用性:一些 Unix 系统。
2.3版本的新功能。
os.WUNTRACED
这个选项会导致子进程被报告,如果它们已经被停止,但是它们的当前状态自停止以来还没有被报告。
可用性:Unix。
2.3版本的新功能。
下面的函数采取一个过程状态代码作为返回的system()
,wait()
或waitpid()
作为一个参数。他们可能被用来确定一个过程的处置。
os.WCOREDUMP(status)
返回True
如果进程产生核心转储,否则返回False
。
可用性:Unix。
2.3版本的新功能。
os.WIFCONTINUED(status)
返回True
如果进程已经从作业控制停止持续,否则返回False
。
可用性:Unix。
2.3版本的新功能。
os.WIFSTOPPED(status)
返回True
如果进程已经停止,否则返回False
。
可用性:Unix。
os.WIFSIGNALED(status)
返回True
如果进程因信号退出,否则返回False
。
可用性:Unix。
os.WIFEXITED(status)
返回True
如果进程使用退出出口(2)
系统调用,否则返回False
。
可用性:Unix。
os.WEXITSTATUS(status)
如果WIFEXITED(status)
为 true,则将整型参数返回到 exit(2)
系统调用。否则,返回值是没有意义的。
可用性:Unix。
os.WSTOPSIG(status)
返回导致进程停止的信号。
可用性:Unix。
os.WTERMSIG(status)
返回导致进程退出的信号。
可用性:Unix。
6.其他系统信息
os.confstr(name)
返回字符串值的系统配置值。name
指定要检索的配置值; 它可能是一个字符串,它是定义的系统值的名称
; 这些名称
是在许多标准(POSIX,Unix 95,Unix 98等)中指定的。一些平台也定义了其他名称
。主机操作系统已知的名称
是confstr_names
字典的键。对于未包含在该映射中的配置变量,也会接受传递名称
的整数。
如果由名称
指定的配置值未定义,None
则返回。
如果名称
是一个字符串并且未知,ValueError
则会引发。如果主机系统不支持名称
的特定值,即使它包含在内confstr_names
,OSError
也会errno.EINVAL
为错误号引发一个值。
可用性:Unix
os.confstr_names
字典映射名称confstr()
由主机操作系统为这些名称定义的整数值接受。这可以用来确定系统已知的一组名称。
可用性:Unix。
os.getloadavg()
返回系统运行队列中最近1分钟,5分钟和15分钟平均的进程数量,OSError
如果无法获得平均负载,则返回上升的进程数量。
可用性:Unix。
2.3版本的新功能。
os.sysconf(name)
返回整数值的系统配置值。如果由名称
指定的配置值未定义,-1
则返回。关于名称
参数的注释也confstr()
适用于此处; 提供有关已知名称
信息的字典由以下给出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
只存在一个分隔符。这'/'
在 Windows 系统中设置为sep
反斜杠。也可以通过os.path
。
os.extsep
将基本文件名与扩展名分开的字符; 例如,'.'
在os.py
。也可以通过os.path
。
2.2版本中的新功能。
os.pathsep
操作系统通常用于分隔搜索路径组件的字符(如in PATH
),例如':'
POSIX或';'
Windows。也可以通过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'
用于 POSIX,'nul'
用于 Windows。也可以通过os.path
。
2.4版本中的新功能。
7.其他功能
os.urandom(n)
返回适合密码使用的n个
随机字节的字符串。
该函数从 OS 特定的随机源中返回随机字节。返回的数据对于加密应用程序来说应该是不可预知的,尽管它的确切质量取决于操作系统的实现。在类 UNIX 系统上,这将会查询/dev/urandom
,并在 Windows 上使用CryptGenRandom()
。如果没有找到随机源,NotImplementedError
将会被提出。
有关您的平台提供的随机数生成器的简单易用的界面,请参阅random.SystemRandom
。
2.4版本中的新功能。