15.1. os — 其他操作系统接口 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/os
跳转至:导航、​搜索

15.1. 操作系统 — 其他操作系统接口

该模块提供了一种使用操作系统相关功能的可移植方式。 如果你只是想读或写一个文件见open(),如果你想操作路径,见os.path模块,如果你想读所有的行在命令行上的所有文件中,请参阅 fileinput 模块。 要创建临时文件和目录,请参阅 tempfile 模块,有关高级文件和目录处理,请参阅 shutil 模块。

有关这些功能可用性的说明:

  • Python所有内置的操作系统相关模块的设计都是这样的,只要有相同的功能,就使用相同的接口; 例如,函数 os.stat(path) 以相同的格式返回有关 path 的统计信息(恰好源自 POSIX 接口)。
  • 特定操作系统特有的扩展也可以通过 os 模块获得,但使用它们当然会对可移植性构成威胁。
  • “可用性:Unix”注释意味着该函数在 Unix 系统上很常见。 它没有就其在特定操作系统上的存在做出任何声明。
  • 如果没有单独说明,所有声称“可用性:Unix”的函数都支持 Mac OS X,它构建在 Unix 内核上。

笔记

在无效或不可访问的文件名和路径,或其他具有正确类型但不被操作系统接受的参数的情况下,此模块中的所有函数都会引发 OSError


exception os.error
内置 OSError 异常的别名。
os.name

导入的操作系统相关模块的名称。 目前已注册以下名称:'posix''nt''os2''ce''java''riscos'

也可以看看

sys.platform 具有更细的粒度。 os.uname() 提供与系统相关的版本信息。

platform 模块提供对系统身份的详细检查。

15.1.1. 工艺参数

这些函数和数据项提供信息并对当前进程和用户进行操作。

os.environ

表示字符串环境的 mapping 对象。 例如,environ['HOME'] 是主目录的路径名(在某些平台上),相当于 C 中的 getenv("HOME")

这个映射是在第一次导入 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()

返回当前进程的有效组 ID。 这对应于当前进程中正在执行的文件上的“set id”位。

可用性:Unix。

os.geteuid()

返回当前进程的有效用户 ID。

可用性:Unix。

os.getgid()

返回当前进程的真实组 ID。

可用性:Unix。

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.initgroups(username, gid)

调用系统 initgroups() 以使用指定用户名所属的所有组以及指定的组 ID 来初始化组访问列表。

可用性:Unix。

2.7 版中的新功能。

os.getlogin()

返回登录进程控制终端的用户名。 大多数情况下,使用环境变量 LOGNAME 来找出用户是谁,或者使用 pwd.getpwuid(os.getuid())[0] 来获取进程真实用户的登录名更有用ID。

可用性:Unix。

os.getpgid(pid)

返回进程id为pid的进程的进程组id。 如果 pid 为 0,则返回当前进程的进程组 ID。

可用性: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 的值,如果不存在,则返回 valuevalue 默认为 None

可用性:大多数类型的 Unix、Windows。

os.putenv(varname, value)

将名为 varname 的环境变量设置为字符串 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 列表设置为 groupsgroups 必须是一个序列,每个元素必须是一个标识一个组的整数。 此操作通常仅对超级用户可用。

可用性:Unix。

2.2 版中的新功能。

笔记

在 Mac OS X 上,groups 的长度不能超过系统定义的有效组 ID 的最大数量,通常为 16。 请参阅 getgroups() 的文档,了解可能无法通过调用 setgroups() 返回相同组列表集的情况。

os.setpgrp()

根据实现的版本(如果有)调用系统调用 setpgrp()setpgrp(0, 0)。 有关语义,请参阅 Unix 手册。

可用性:Unix。

os.setpgid(pid, pgrp)

调用系统调用setpgid(),将id为pid的进程的进程组id设置为id为pgrp的进程组。 有关语义,请参阅 Unix 手册。

可用性:Unix。

os.setregid(rgid, egid)

设置当前进程的真实有效的组 ID。

可用性:Unix。

os.setresgid(rgid, egid, sgid)

设置当前进程的真实、有效和保存的组 ID。

可用性:Unix。

2.7 版中的新功能。

os.setresuid(ruid, euid, suid)

设置当前进程的真实、有效和保存的用户 ID。

可用性: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)

设置当前进程的用户 ID。

可用性:Unix。

os.strerror(code)

返回code中错误代码对应的错误信息。 在给定未知错误编号时 strerror() 返回 NULL 的平台上,会引发 ValueError

可用性: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。


15.1.2. 文件对象创建

这些函数创建新的文件对象。 (另见 open()。)

os.fdopen(fd[, mode[, bufsize]])

返回连接到文件描述符 fd 的打开文件对象。 modebufsize 参数与内置 open() 函数的相应参数具有相同的含义。 如果 fdopen() 引发异常,它会使 fd 保持不变(未关闭)。

可用性:Unix、Windows。

在 2.3 版中更改:指定后,mode 参数现在必须以字母 'r''w' 或 [ 之一开头X144X],否则会引发 ValueError

2.5 版更改: 在 Unix 上,当 mode 参数以 'a' 开头时,在文件描述符上设置 O_APPEND 标志(其中fdopen() 实现已经在大多数平台上实现了)。

os.popen(command[, mode[, bufsize]])

打开通向或来自 命令 的管道。 返回值是一个连接到管道的打开文件对象,可以根据 mode'r'(默认)还是 'w' 来读取或写入。 bufsize 参数与内置 open() 函数的相应参数具有相同的含义。 命令的退出状态(以 wait() 指定的格式编码)可作为文件对象的 close() 方法的返回值,除了当退出状态为零(无错误终止),返回 None

可用性:Unix、Windows。

自 2.6 版起已弃用:此功能已过时。 使用 子进程 模块。 特别检查 用子进程模块 部分替换旧函数。

2.0 版更改: 此函数在早期版本的 Python 的 Windows 下工作不可靠。 这是由于使用了 Windows 提供的库中的 _popen() 函数。 较新版本的 Python 不使用 Windows 库中损坏的实现。

os.tmpfile()

返回以更新模式打开的新文件对象 (w+b)。 该文件没有与之关联的目录条目,一旦该文件没有文件描述符,它将被自动删除。

可用性:Unix、Windows。

有许多不同的 popen*() 函数提供了稍微不同的创建子流程的方法。

自 2.6 版起已弃用:所有 popen*() 功能都已过时。 使用 子进程 模块。


对于每个 popen*() 变体,如果指定了 bufsize,则它指定 I/O 管道的缓冲区大小。 mode,如果提供,应该是字符串 'b''t'; 在 Windows 上,这需要确定文件对象应该以二进制还是文本模式打开。 mode 的默认值为 't'

此外,对于这些变体中的每一个,在 Unix 上,cmd 可能是一个序列,在这种情况下,参数将直接传递给程序而无需 shell 干预(如 os.spawnv()[X189X ])。 如果 cmd 是一个字符串,它将被传递给 shell(与 os.system() 一样)。

这些方法无法从子进程中检索退出状态。 控制输入和输出流并检索返回码的唯一方法是使用 subprocess 模块; 这些仅在 Unix 上可用。

有关与使用这些函数相关的可能死锁条件的讨论,请参阅 流控制问题

os.popen2(cmd[, mode[, bufsize]])

作为子进程执行cmd,返回文件对象(child_stdin, child_stdout)

自 2.6 版起已弃用:此功能已过时。 使用 子进程 模块。 特别检查 用子进程模块 部分替换旧函数。

可用性:Unix、Windows。

2.0 版中的新功能。

os.popen3(cmd[, mode[, bufsize]])

作为子进程执行cmd,返回文件对象(child_stdin, child_stdout, child_stderr)

自 2.6 版起已弃用:此功能已过时。 使用 子进程 模块。 特别检查 用子进程模块 部分替换旧函数。

可用性:Unix、Windows。

2.0 版中的新功能。

os.popen4(cmd[, mode[, bufsize]])

作为子进程执行cmd,返回文件对象(child_stdin, child_stdout_and_stderr)

自 2.6 版起已弃用:此功能已过时。 使用 子进程 模块。 特别检查 用子进程模块 部分替换旧函数。

可用性:Unix、Windows。

2.0 版中的新功能。

(注意 child_stdin, child_stdout, and child_stderr 是从子进程的角度命名的,所以 child_stdin 是子进程的标准输入。)

此功能在 popen2 模块中也可用,使用相同名称的函数,但这些函数的返回值具有不同的顺序。


15.1.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 给出的文件模式更改为数字 mode。 有关 mode 的可能值,请参阅 chmod() 的文档。

可用性:Unix。

2.6 版中的新功能。

os.fchown(fd, uid, gid)

fd 给出的文件的所有者和组 ID 更改为数字 uidgid。 要保持其中一个 id 不变,请将其设置为 -1。

可用性:Unix。

2.6 版中的新功能。

os.fdatasync(fd)

强制将带有文件描述符 fd 的文件写入磁盘。 不强制更新元数据。

可用性:Unix。

笔记

此功能在 MacOS 上不可用。

os.fpathconf(fd, name)

返回与打开文件相关的系统配置信息。 name 指定要检索的配置值; 它可能是一个字符串,它是定义的系统值的名称; 这些名称在许多标准(POSIX.1、Unix 95、Unix 98 等)中都有规定。 一些平台还定义了其他名称。 主机操作系统已知的名称在 pathconf_names 字典中给出。 对于未包含在该映射中的配置变量,也接受为 name 传递整数。

如果 name 是一个字符串并且未知,则会引发 ValueError。 如果主机系统不支持 name 的特定值,即使它包含在 pathconf_names 中,OSError 也会用 errno.EINVAL[ X156X] 为错误编号。

可用性:Unix。

os.fstat(fd)

返回文件描述符 fd 的状态,如 stat()

可用性:Unix、Windows。

os.fstatvfs(fd)

返回有关包含与文件描述符 fd 关联的文件的文件系统的信息,例如 statvfs()

可用性:Unix。

os.fsync(fd)

强制将带有文件描述符 fd 的文件写入磁盘。 在 Unix 上,这会调用原生的 fsync() 函数; 在 Windows 上,MS _commit() 函数。

如果您从 Python 文件对象 f 开始,首先执行 f.flush(),然后执行 os.fsync(f.fileno()),以确保与 f[ X157X] 写入磁盘。

可用性:Unix 和 Windows 从 2.2.3 开始。

os.ftruncate(fd, length)

截断文件描述符fd对应的文件,使其大小最多为length个字节。

可用性:Unix。

os.isatty(fd)
如果文件描述符 fd 已打开并连接到 tty(类似)设备,则返回 True,否则返回 False
os.lseek(fd, pos, how)

设置文件描述符fd的当前位置为pos,修改为howSEEK_SET0设置相对于文件开头的位置; SEEK_CUR1 相对于当前位置设置; SEEK_END2 将其设置为相对于文件的结尾。 从头开始返回以字节为单位的新光标位置。

可用性:Unix、Windows。

os.SEEK_SET
os.SEEK_CUR
os.SEEK_END

lseek() 函数的参数。 它们的值分别为 0、1 和 2。

可用性:Windows、Unix。

2.5 版中的新功能。

os.open(file, flags[, mode])

打开文件 file 并根据 flags 设置各种标志,可能根据 mode 设置其模式。 默认的mode0777(八进制),先屏蔽掉当前的umask值。 返回新打开文件的文件描述符。

有关标志和模式值的说明,请参阅 C 运行时文档; 标志常量(如 O_RDONLYO_WRONLY)也在这个模块中定义(见 open() 标志常量)。 特别是,在 Windows 上添加 O_BINARY 需要以二进制模式打开文件。

可用性:Unix、Windows。

笔记

此函数用于低级 I/O。 对于正常使用,使用内置函数 open(),它返回一个“文件对象”,带有 read()write() 方法(和还有很多)。 要将文件描述符包装在“文件对象”中,请使用 fdopen()

os.openpty()

打开一个新的伪终端对。 分别为 pty 和 tty 返回一对文件描述符 (master, slave)。 对于(稍微)更便携的方法,请使用 pty 模块。

可用性:Unix 的一些风格。

os.pipe()

创建管道。 返回一对分别可用于读取和写入的文件描述符 (r, w)

可用性:Unix、Windows。

os.read(fd, n)

从文件描述符 fd 中最多读取 n 个字节。 返回一个包含读取字节的字符串。 如果已到达 fd 引用的文件末尾,则返回空字符串。

可用性: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

可用性:Unix。

os.ttyname(fd)

返回一个字符串,该字符串指定与文件描述符 fd 关联的终端设备。 如果 fd 未与终端设备关联,则会引发异常。

可用性:Unix。

os.write(fd, str)

将字符串 str 写入文件描述符 fd。 返回实际写入的字节数。

可用性:Unix、Windows。

笔记

此函数用于低级 I/O,并且必须应用于由 os.open()pipe() 返回的文件描述符。 写入由内置函数 open()popen()fdopen()sys 返回的“文件对象” .stdoutsys.stderr,使用其 write() 方法。

15.1.3.1. open()标志常量

以下常量是 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

上述常量仅在 Unix 上可用。
os.O_BINARY

os.O_NOINHERIT
os.O_SHORT_LIVED
os.O_TEMPORARY
os.O_RANDOM
os.O_SEQUENTIAL
os.O_TEXT

上述常量仅在 Windows 上可用。
os.O_ASYNC

os.O_DIRECT
os.O_DIRECTORY
os.O_NOFOLLOW
os.O_NOATIME
os.O_SHLOCK
os.O_EXLOCK

上述常量是扩展,如果它们不是由 C 库定义的,则不存在。


15.1.4. 文件和目录

os.access(path, mode)

使用真实的 uid/gid 来测试对 路径 的访问。 请注意,大多数操作将使用有效的 uid/gid,因此可以在 suid/sgid 环境中使用此例程来测试调用用户是否具有对 path 的指定访问权限。 mode应该是F_OK来测试path是否存在,也可以是R_OK中的一个或多个的包含OR X141X]W_OK 和 X_OK 来测试权限。 如果允许访问,则返回 True,否则返回 False。 有关更多信息,请参阅 Unix 手册页 access(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()mode 参数传递的值来测试 path 的存在。
os.R_OK
包含在 access()mode 参数中的值以测试 path 的可读性。
os.W_OK
包含在 access()mode 参数中的值以测试 path 的可写性。
os.X_OK
包含在 access()mode 参数中的值,以确定是否可以执行 path
os.chdir(path)

将当前工作目录更改为 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)

path 的标志设置为数字 flagsflags 可以采用以下值的组合(按位或)(在 stat 模块中定义):

可用性:Unix。

2.6 版中的新功能。

os.chroot(path)

将当前进程的根目录更改为path。 可用性:Unix。

2.2 版中的新功能。

os.chmod(path, mode)

path 的模式更改为数字 modemode 可以采用以下值之一(在 stat 模块中定义)或它们的按位或组合:

可用性:Unix、Windows。

笔记

尽管 Windows 支持 chmod(),但您只能用它设置文件的只读标志(通过 stat.S_IWRITEstat.S_IREAD 常量或相应的整数值)。 所有其他位都被忽略。

os.chown(path, uid, gid)

path 的所有者和组 ID 更改为数字 uidgid。 要保持其中一个 id 不变,请将其设置为 -1。

可用性:Unix。

os.lchflags(path, flags)

path 的标志设置为数字 flags,如 chflags(),但不要遵循符号链接。

可用性:Unix。

2.6 版中的新功能。

os.lchmod(path, mode)

path 的模式更改为数字 mode。 如果 path 是一个符号链接,这会影响符号链接而不是目标。 有关 mode 的可能值,请参阅 chmod() 的文档。

可用性:Unix。

2.6 版中的新功能。

os.lchown(path, uid, gid)

path 的所有者和组 ID 更改为数字 uidgid。 此函数不会遵循符号链接。

可用性:Unix。

2.3 版中的新功能。

os.link(source, link_name)

创建一个指向 source 的硬链接,名为 link_name

可用性:Unix。

os.listdir(path)

返回一个列表,其中包含 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 的文件系统节点(文件、设备专用文件或命名管道)。 mode 指定要使用的权限和要创建的节点类型,与 stat.S_IFREGstat.S_IFCHRstat.S_IFBLK 之一组合(按位或) ] 和 stat.S_IFIFO(这些常数在 stat 中可用)。 对于stat.S_IFCHRstat.S_IFBLKdevice定义了新创建的设备专用文件(可能使用os.makedev()),否则被忽略。

2.3 版中的新功能。

os.major(device)

从原始设备号中提取设备主号(通常是 stat 中的 st_devst_rdev 字段)。

2.3 版中的新功能。

os.minor(device)

从原始设备编号中提取设备次要编号(通常是 stat 中的 st_devst_rdev 字段)。

2.3 版中的新功能。

os.makedev(major, minor)

从主设备号和次设备号组成一个原始设备号。

2.3 版中的新功能。

os.mkdir(path[, mode])

创建一个名为 path 的目录,数字模式为 mode。 默认 模式0777(八进制)。 如果目录已存在,则引发 OSError

在某些系统上,mode 被忽略。 在使用它的地方,首先屏蔽掉当前的 umask 值。 如果不是最后 9 位(即 mode) 的八进制表示的最后 3 位数字已设置,其含义取决于平台。 在某些平台上,它们会被忽略,您应该显式调用 chmod() 来设置它们。

也可以创建临时目录; 参见 tempfile 模块的 tempfile.mkdtemp() 函数。

可用性:Unix、Windows。

os.makedirs(path[, mode])

递归目录创建功能。 与 mkdir() 类似,但需要包含叶目录的所有中间级目录。 如果叶目录已存在或无法创建,则引发 error 异常。 默认 模式0777(八进制)。

mode参数传递给mkdir(); 请参阅 mkdir() 描述 了解它是如何解释的。

笔记

如果要创建的路径元素包含 os.pardirmakedirs() 将变得混乱。

1.5.2 版中的新功能。

2.3 版更改: 此函数现在可以正确处理 UNC 路径。

os.pathconf(path, name)

返回与命名文件相关的系统配置信息。 name 指定要检索的配置值; 它可能是一个字符串,它是定义的系统值的名称; 这些名称在许多标准(POSIX.1、Unix 95、Unix 98 等)中都有规定。 一些平台还定义了其他名称。 主机操作系统已知的名称在 pathconf_names 字典中给出。 对于未包含在该映射中的配置变量,也接受为 name 传递整数。

如果 name 是一个字符串并且未知,则会引发 ValueError。 如果主机系统不支持 name 的特定值,即使它包含在 pathconf_names 中,OSError 也会用 errno.EINVAL[ X156X] 为错误编号。

可用性:Unix。

os.pathconf_names
pathconf()fpathconf() 接受的字典映射名称到主机操作系统为这些名称定义的整数值。 这可用于确定系统已知的名称集。 可用性:Unix。
os.readlink(path)

返回一个字符串,表示符号链接指向的路径。 结果可能是绝对或相对路径名; 如果是相对的,则可以使用 os.path.join(os.path.dirname(path), result) 将其转换为绝对路径名。

在 2.6 版更改: 如果 path 是 Unicode 对象,则结果也将是 Unicode 对象。

可用性:Unix。

os.remove(path)

移除(删除)文件 path。 如果 path 是目录,则引发 OSError; 请参阅下面的 rmdir() 以删除目录。 这与下面记录的 unlink() 函数相同。 在 Windows 上,尝试删除正在使用的文件会导致引发异常; 在 Unix 上,目录条目被删除,但分配给文件的存储在原始文件不再使用之前不可用。

可用性:Unix、Windows。

os.removedirs(path)

递归删除目录。 像 rmdir() 一样工作,除了如果叶目录被成功删除,removedirs() 会尝试连续删除 path 中提到的每个父目录,直到出现错误被引发(被忽略,因为它通常意味着父目录不为空)。 例如,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 存在并且是一个文件,如果用户有权限,它将被静默替换。 如果 srcdst 在不同的文件系统上,操作可能会在某些 Unix 风格上失败。 如果成功,重命名将是一个原子操作(这是 POSIX 要求)。 在 Windows 上,如果 dst 已经存在,即使是文件,也会引发 OSError; 当 dst 命名现有文件时,可能无法实现原子重命名。

可用性:Unix、Windows。

os.renames(old, new)

递归目录或文件重命名功能。 与 rename() 类似,但首先尝试创建使新路径名正确所需的任何中间目录。 重命名后,将使用 removedirs() 删除与旧名称最右侧路径段对应的目录。

1.5.2 版中的新功能。

笔记

如果您缺乏删除叶目录或文件所需的权限,此功能可能会因新目录结构而失败。

os.rmdir(path)

移除(删除)目录path。 仅在目录为空时有效,否则会引发 OSError。 为了删除整个目录树,可以使用 shutil.rmtree()

可用性:Unix、Windows。

os.stat(path)

在给定路径上执行等效于 stat() 系统调用。 (此函数遵循符号链接;要统计符号链接,请使用 lstat()。)

返回值是一个对象,其属性对应于stat结构的成员,即:

  • st_mode - 保护位,

  • st_ino - inode 编号,

  • st_dev - 设备,

  • st_nlink - 硬链接数,

  • st_uid - 所有者的用户 ID,

  • 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_atimest_mtimest_ctime 属性的确切含义和分辨率取决于操作系统和文件系统。 例如,在使用 FAT 或 FAT32 文件系统的 Windows 系统上,st_mtime 具有 2 秒分辨率,而 st_atime 仅具有 1 天分辨率。 有关详细信息,请参阅您的操作系统文档。

为了向后兼容,stat() 的返回值也可以作为至少 10 个整数的元组访问,按顺序给出 stat 结构的最重要(和可移植)成员st_modest_inost_devst_nlinkst_uidst_gid、 X285X]、st_mtimest_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_genst_birthtime

os.stat_float_times([newvalue])

确定 stat_result 是否将时间戳表示为浮动对象。 如果 newvalueTrue,以后调用 stat() 返回浮点数,如果是 False,以后调用返回整数。 如果省略 newvalue,则返回当前设置。

为了与较旧的 Python 版本兼容,将 stat_result 作为元组访问总是返回整数。

2.5 版更改:Python 现在默认返回浮点值。 使用浮点时间戳无法正常工作的应用程序可以使用此功能来恢复旧行为。

时间戳的分辨率(即最小的可能分数)取决于系统。 有些系统只支持第二分辨率; 在这些系统上,分数将始终为零。

建议只在__main__模块中的程序启动时更改此设置; 图书馆永远不应该改变这个设置。 如果应用程序使用的库在处理浮点时间戳时无法正常工作,则该应用程序应关闭该功能,直到该库得到更正。

os.statvfs(path)

在给定路径上执行 statvfs() 系统调用。 返回值是一个对象,其属性描述给定路径上的文件系统,并对应于 statvfs 结构的成员,即:f_bsize, f_frsize, f_blocksf_bfreef_bavailf_filesf_ffreef_favailf_flag X262X]。

为了向后兼容,返回值也可以作为一个元组访问,其值对应于属性,按照上面给出的顺序。 标准模块 statvfs 定义了一些常量,当将其作为序列访问时,这些常量有助于从 statvfs 结构中提取信息; 在编写需要使用不支持将字段作为属性访问的 Python 版本的代码时,这仍然很有用。

可用性:Unix。

在 2.2 版中更改: 添加了对作为返回对象属性的值的访问。

os.symlink(source, link_name)

创建一个指向 source 的符号链接,名为 link_name

可用性:Unix。

os.tempnam([dir[, prefix]])

返回对创建临时文件合理的唯一路径名。 如果省略 dirNone,这将是一个绝对路径,用于命名目录 dir 中的潜在目录条目或临时文件的公共位置。 如果给定而不是 None,则 prefix 用于为文件名提供短前缀。 应用程序负责正确创建和管理使用 tempnam() 返回的路径创建的文件; 不提供自动清理。 在 Unix 上,环境变量 TMPDIR 覆盖 dir,而在 Windows 上使用 TMP。 该函数的具体行为取决于 C 库实现; 系统文档中未指定某些方面。

警告

使用 tempnam() 容易受到符号链接攻击; 考虑使用 tmpfile()(部分 File Object Creation)代替。

可用性:Unix、Windows。

os.tmpnam()

返回对创建临时文件合理的唯一路径名。 这将是一个绝对路径,为临时文件的公共位置中的潜在目录条目命名。 应用程序负责正确创建和管理使用 tmpnam() 返回的路径创建的文件; 不提供自动清理。

警告

使用 tmpnam() 容易受到符号链接攻击; 考虑使用 tmpfile()(部分 File Object Creation)代替。

可用性:Unix、Windows。 不过,此函数可能不应该在 Windows 上使用:Microsoft 的 tmpnam() 实现总是在当前驱动器的根目录中创建一个名称,这通常是临时文件的不良位置(取决于权限,您甚至可能无法使用此名称打开文件)。

os.TMP_MAX
tmpnam() 在重用名称之前将生成的唯一名称的最大数量。
os.unlink(path)

移除(删除)文件 path。 这与 remove() 的功能相同; unlink() 名称是其传统的 Unix 名称。

可用性:Unix、Windows。

os.utime(path, times)

设置path指定文件的访问和修改次数。 如果 timesNone,则文件的访问和修改时间设置为当前时间。 (效果类似于在路径上运行 Unix 程序 touch。)否则,times 必须是一个 2 元组的数字,形式为 (atime, mtime)分别用于设置访问和修改时间。 path能否给出目录,取决于操作系统是否将目录实现为文件(例如Windows没有)。 请注意,您在此处设置的确切时间可能不会被后续的 stat() 调用返回,具体取决于您的操作系统记录访问和修改时间的分辨率; 参见 stat()

2.0 版更改: 添加了对 None 的支持。

可用性:Unix、Windows。

os.walk(top, topdown=True, onerror=None, followlinks=False)

通过自顶向下或自底向上遍历树来生成目录树中的文件名。 对于以目录 top 为根的树中的每个目录(包括 top 本身),它产生一个 3 元组 (dirpath, dirnames, filenames)

dirpath 是一个字符串,目录的路径。 dirnamesdirpath 中子目录的名称列表(不包括 '.''..')。 filenamesdirpath 中非目录文件的名称列表。 请注意,列表中的名称不包含路径组件。 要获取到 dirpath 中的文件或目录的完整路径(以 top 开头),请执行 os.path.join(dirpath, name)

如果可选参数 topdownTrue 或未指定,则目录的三元组在其任何子目录的三元组之前生成(目录自上而下生成)。 如果 topdownFalse,则目录的三元组在其所有子目录的三元组之后生成(目录自下而上生成)。 无论 topdown 的值如何,在生成目录及其子目录的元组之前,都会检索子目录列表。

topdownTrue 时,调用者可以就地修改 dirnames 列表(可能使用 del 或切片分配),以及 ]walk() 只会递归到名称保留在 dirnames 中的子目录; 这可用于修剪搜索,施加特定的访问顺序,甚至通知 walk() 调用者在再次恢复 walk() 之前创建或重命名的目录。 当 topdownFalse 时修改 dirnames 对步行的行为没有影响,因为在自底向上模式下 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 版中的新功能。


15.1.5. 流程管理

这些功能可用于创建和管理流程。

各种 exec* 函数获取加载到进程中的新程序的参数列表。 在每种情况下,这些参数中的第一个作为它自己的名称传递给新程序,而不是作为用户可能在命令行上键入的参数。 对于 C 程序员来说,这是传递给程序的 main()argv[0]。 例如,os.execv('/bin/echo', ['foo', 'bar']) 只会在标准输出上打印 barfoo 似乎会被忽略。

os.abort()

为当前进程生成 SIGABRT 信号。 在 Unix 上,默认行为是生成核心转储; 在 Windows 上,进程会立即返回退出代码 3。 请注意,调用此函数不会使用 signal.signal() 调用为 SIGABRT 注册的 Python 信号处理程序。

可用性: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()[ X122X]) 将使用 PATH 环境变量来定位程序 文件 。 当环境被替换时(使用 exec*e 变体之一,将在下一段讨论),新环境用作 PATH 的源] 多变的。 其他变体 execl()execle()execv()execve(),将不使用 [ X123X]PATH 变量来定位可执行文件; 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()

Fork 一个子进程。 在子进程中返回 0,在父进程中返回子进程 ID。 如果发生错误 OSError 会被引发。

请注意,某些平台(包括 FreeBSD <= 6.3、Cygwin 和 OS/2 EMX)在从线程使用 fork() 时存在已知问题。

警告

有关使用带有 fork() 的 SSL 模块的应用程序,请参阅 ssl

可用性:Unix。

os.forkpty()

Fork 一个子进程,使用一个新的伪终端作为子进程的控制终端。 返回一对(pid, fd),其中pid为子进程中的0,父进程中新子进程的id,fd为文件伪终端主端的描述符。 要获得更便携的方法,请使用 pty 模块。 如果发生错误 OSError 会被引发。

可用性:Unix 的一些风格。

os.kill(pid, sig)

发送信号sig给进程pid。 主机平台上可用的特定信号的常数在 信号 模块中定义。

Windows: signal.CTRL_C_EVENTsignal.CTRL_BREAK_EVENT 信号是特殊信号,只能发送到共享一个公共控制台窗口的控制台进程,例如某些子进程。 sig 的任何其他值都会导致进程被 TerminateProcess API 无条件终止,并且退出代码将设置为 sigkill() 的 Windows 版本另外需要杀死进程句柄。

2.7 新功能:Windows 支持

os.killpg(pgid, sig)

将信号sig发送到进程组pgid

可用性:Unix。

2.3 版中的新功能。

os.nice(increment)

increment 添加到进程的“niceness”。 回归新的美好。

可用性: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)

在新进程中执行程序path

(请注意,subprocess 模块为生成新进程和检索其结果提供了更强大的工具;使用该模块比使用这些函数更可取。 特别检查 用子进程模块 替换旧函数部分。)

如果modeP_NOWAIT,该函数返回新进程的进程id; 如果modeP_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(),将不使用 [ X127X]PATH 变量来定位可执行文件; 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_NOWAIT
os.P_NOWAITO

spawn* 系列函数的 mode 参数的可能值。 如果给出了这些值中的任何一个,则 spawn*() 函数将在新进程创建后立即返回,进程 ID 作为返回值。

可用性:Unix、Windows。

1.6 版中的新功能。

os.P_WAIT

spawn* 系列函数的 mode 参数的可能值。 如果指定为 mode,则 spawn*() 函数在新进程运行完成之前不会返回,并返回运行成功进程的退出代码,或者 -signal 如果信号终止进程。

可用性:Unix、Windows。

1.6 版中的新功能。

os.P_DETACH
os.P_OVERLAY

spawn* 系列函数的 mode 参数的可能值。 它们的便携性不如上面列出的那些。 P_DETACHP_NOWAIT 类似,但新进程与调用进程的控制台分离。 如果使用P_OVERLAY,则替换当前进程; spawn*() 函数不会返回。

可用性:Windows。

1.6 版中的新功能。

os.startfile(path[, operation])

启动文件及其关联的应用程序。

当未指定 operation'open' 时,这就像在 Windows 资源管理器中双击文件,或将文件名作为参数提供给 start 命令来自交互式命令外壳:文件使用与其扩展名关联的任何应用程序(如果有)打开。

当给出另一个 操作 时,它必须是一个“命令动词”,指定应该对文件做什么。 Microsoft 记录的常用动词是 'print''edit'(用于文件)以及 'explore''find'(用于目录)。

startfile() 在关联的应用程序启动后立即返回。 没有等待应用程序关闭的选项,也没有办法检索应用程序的退出状态。 path 参数是相对于当前目录的。 如果要使用绝对路径,请确保第一个字符不是斜杠 ('/'); 如果是,则底层的 Win32 ShellExecute() 函数不起作用。 使用 os.path.normpath() 函数确保路径为 Win32 正确编码。

可用性:Windows。

2.0 版中的新功能。

2.5版新增:操作参数。

os.system(command)

在子shell中执行命令(一个字符串)。 这是通过调用标准 C 函数 system() 来实现的,并且具有相同的限制。 对 sys.stdin 等的更改 不会反映在执行命令的环境中。

在 Unix 上,返回值是以为 wait() 指定的格式编码的进程的退出状态。 注意POSIX没有指定Csystem()函数的返回值的含义,所以Python函数的返回值是系统相关的。

在Windows上,返回值是系统shell在运行command后返回的值,由Windows环境变量COMSPEC给出:在command.com[ X178X] 系统(Windows 95、98 和 ME)这总是 0; 在 cmd.exe 系统(Windows NT、2000 和 XP)上,这是命令运行的退出状态; 在使用非本地 shell 的系统上,请查阅您的 shell 文档。

subprocess 模块为生成新进程和检索结果提供了更强大的工具; 使用该模块比使用此功能更可取。 请参阅 子进程 文档中的 用子进程模块 替换旧函数部分,了解一些有用的方法。

可用性:Unix、Windows。

os.times()

返回一个 5 元组的浮点数,指示累积(处理器或其他)时间,以秒为单位。 项目是:用户时间、系统时间、孩子的用户时间、孩子的系统时间和从过去一个固定点开始经过的实时时间,按此顺序。 请参阅 Unix 手册页 times(2) 或相应的 Windows 平台 API 文档。 在 Windows 上,只填充前两项,其他项为零。

可用性:Unix、Windows

os.wait()

等待子进程完成,并返回一个包含其pid和退出状态指示的元组:一个16位数字,其低字节是杀死进程的信号号,高字节是退出状态(如果信号数字为零); 如果生成了核心文件,则设置低字节的高位。

可用性:Unix。

os.waitpid(pid, options)

此函数的细节在 Unix 和 Windows 上有所不同。

在 Unix 上:等待进程 ID pid 给出的子进程完成,并返回一个包含其进程 ID 和退出状态指示的元组(编码为 wait())。 调用的语义受整数 options 的值影响,对于正常操作应该是 0

如果 pid 大于 0,则 waitpid() 请求该特定进程的状态信息。 如果 pid0,则请求的是当前进程的进程组中任何子进程的状态。 如果 pid-1,则请求属于当前进程的任何子进程。 如果 pid 小于 -1,则请求进程组 -pid 中的任何进程的状态(pid 的绝对值)。

当系统调用返回 -1 时,会以 errno 的值引发 OSError

在 Windows 上:等待进程句柄 pid 给出的进程完成,并返回一个包含 pid 的元组,其退出状态左移 8 位(移位使跨平台使用的功能更容易)。 pid 小于或等于 0 在 Windows 上没有特殊含义,并引发异常。 整数 options 的值没有影响。 pid 可以指任何 id 已知的进程,不一定是子进程。 用 P_NOWAIT 调用的 spawn* 函数返回合适的进程句柄。

os.wait3(options)

类似于 waitpid(),除了没有给出进程 id 参数并且返回一个包含子进程 id、退出状态指示和资源使用信息的 3 元素元组。 有关资源使用信息的详细信息,请参阅 resource.getrusage()。 选项参数与提供给 waitpid()wait4() 的参数相同。

可用性:Unix。

2.5 版中的新功能。

os.wait4(pid, options)

类似于 waitpid(),除了一个 3 元素元组,包含子进程 ID、退出状态指示和资源使用信息被返回。 有关资源使用信息的详细信息,请参阅 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)

如果进程使用 exit(2) 系统调用退出,则返回 True,否则返回 False

可用性:Unix。

os.WEXITSTATUS(status)

如果 WIFEXITED(status) 为真,则将整数参数返回给 exit(2) 系统调用。 否则,返回值毫无意义。

可用性:Unix。

os.WSTOPSIG(status)

返回导致进程停止的信号。

可用性:Unix。

os.WTERMSIG(status)

返回导致进程退出的信号。

可用性:Unix。


15.1.6. 其他系统信息

os.confstr(name)

返回字符串值系统配置值。 name 指定要检索的配置值; 它可能是一个字符串,它是定义的系统值的名称; 这些名称在许多标准(POSIX、Unix 95、Unix 98 等)中都有规定。 一些平台还定义了其他名称。 主机操作系统已知的名称作为 confstr_names 字典的键给出。 对于未包含在该映射中的配置变量,也接受为 name 传递整数。

如果未定义 name 指定的配置值,则返回 None

如果 name 是一个字符串并且未知,则会引发 ValueError。 如果主机系统不支持 name 的特定值,即使它包含在 confstr_names 中,OSError 也会用 errno.EINVAL[ X156X] 为错误编号。

可用性:Unix

os.confstr_names

confstr() 接受的字典映射名称到主机操作系统为这些名称定义的整数值。 这可用于确定系统已知的名称集。

可用性:Unix。

os.getloadavg()

返回系统运行队列中过去 1、5 和 15 分钟的平均进程数,如果无法获得平均负载,则提高 OSError

可用性:Unix。

2.3 版中的新功能。

os.sysconf(name)

返回整数值系统配置值。 如果未定义 name 指定的配置值,则返回 -1。 关于 confstr()name 参数的评论也适用于此; 提供已知名称信息的字典由 sysconf_names 给出。

可用性:Unix。

os.sysconf_names

sysconf() 接受的字典映射名称到主机操作系统为这些名称定义的整数值。 这可用于确定系统已知的名称集。

可用性:Unix。

以下数据值用于支持路径操作操作。 这些是为所有平台定义的。

os.path 模块中定义了对路径名的高级操作。

os.curdir
操作系统用来引用当前目录的常量字符串。 这是用于 Windows 和 POSIX 的 '.'。 也可以通过 os.path 获得。
os.pardir
操作系统用来引用父目录的常量字符串。 这是用于 Windows 和 POSIX 的 '..'。 也可以通过 os.path 获得。
os.sep
操作系统用来分隔路径名组件的字符。 这是 POSIX 的 '/' 和 Windows 的 '\\'。 请注意,知道这不足以解析或连接路径名——使用 os.path.split()os.path.join()——但它偶尔有用. 也可以通过 os.path 获得。
os.altsep
操作系统用于分隔路径名组件的替代字符,如果仅存在一个分隔符,则为 None。 在 sep 是反斜杠的 Windows 系统上,这被设置为 '/'。 也可以通过 os.path 获得。
os.extsep

将基本文件名与扩展名分开的字符; 例如,os.py 中的 '.'。 也可以通过 os.path 获得。

2.2 版中的新功能。

os.pathsep
操作系统通常用于分隔搜索路径组件的字符(如 PATH),例如 ':' 用于 POSIX 或 ';' 用于 Windows。 也可以通过 os.path 获得。
os.defpath
如果环境没有 'PATH' 键,则 exec*p*spawn*p* 使用的默认搜索路径。 也可以通过 os.path 获得。
os.linesep
用于在当前平台上分隔(或更确切地说,终止)行的字符串。 这可以是单个字符,例如 POSIX 的 '\n',或多个字符,例如 Windows 的 '\r\n'。 写入以文本模式打开的文件时,不要使用 os.linesep 作为行终止符(默认); 在所有平台上改用单个 '\n'
os.devnull

空设备的文件路径。 例如:'/dev/null' 用于 POSIX,'nul' 用于 Windows。 也可以通过 os.path 获得。

2.4 版中的新功能。


15.1.7. 杂项功能

os.urandom(n)

返回适合加密使用的 n 随机字节字符串。

此函数从特定于操作系统的随机源返回随机字节。 返回的数据对于加密应用程序来说应该是不可预测的,尽管它的确切质量取决于操作系统的实现。 在类 UNIX 系统上,这将查询 /dev/urandom,而在 Windows 上,它将使用 CryptGenRandom()。 如果未找到随机源,则会引发 NotImplementedError

有关您平台提供的随机数生成器的易于使用的界面,请参阅 random.SystemRandom

2.4 版中的新功能。