15.1. os —其他 os 接口

该模块提供了使用依赖于 os 的Function的便携式方法。如果只想读取或写入文件,请参见open();如果要操纵路径,请参见os.path模块;如果要读取命令行中所有文件的所有行,请参见fileinput模块。有关创建临时文件和目录的信息,请参见tempfile模块;有关高级文件和目录的处理的信息,请参见shutil模块。

有关这些Function的可用性的注意事项:

Note

如果文件名和路径无效或无法访问,或者具有正确类型但 os 不接受的其他参数,则此模块中的所有函数都会引发OSError

See also

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

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

15.1.1. Process参数

这些Function和数据项提供信息并在当前进程和用户上运行。

首次导入os模块时(通常在 Python 启动期间作为处理site.py的一部分)捕获此 Map。此时间之后对环境所做的更改不会反映在os.environ中,除非直接pass修改os.environ进行更改。

如果平台支持putenv()Function,则此 Map 可用于修改环境以及查询环境。修改 Map 后,将自动调用putenv()

Note

直接调用putenv()不会更改os.environ,因此最好修改os.environ

Note

在某些平台上,包括 FreeBSD 和 Mac OS X,设置environ可能会导致内存泄漏。有关putenv()的信息,请参阅系统文档。

如果未提供putenv(),则可以将此 Map 的修改后的副本传递到适当的进程创建函数,以使子进程使用修改后的环境。

如果平台支持unsetenv()Function,则可以删除此 Map 中的项目以取消设置环境变量。当从os.environ中删除一个项目,并且调用pop()clear()方法之一时,将自动调用unsetenv()

在 2.6 版中进行了更改:在调用os.environ.clear()os.environ.pop()时,也未设置环境变量。

Availability: Unix.

Availability: Unix.

Availability: Unix.

Availability: Unix.

Availability: Unix.

Note

在 Mac OS X 上,getgroups()行为与其他 Unix 平台有所不同。如果 Python 解释程序的部署目标是10.5或更早版本,则getgroups()返回与当前用户进程关联的有效组 ID 的列表;否则,此列表限于系统定义的条目数,通常为 16,并且可以pass适当地特权对setgroups()的调用进行修改。如果构建的部署目标大于10.5,则getgroups()返回与该进程的有效用户标识关联的用户的当前组访问列表;组访问列表可能会在该过程的整个生命周期内发生变化,不受setgroups()调用的影响,并且其长度不限于 16.可以使用sysconfig.get_config_var()获得部署目标值MACOSX_DEPLOYMENT_TARGET

Availability: Unix.

2.7 版的新Function。

Availability: Unix.

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

可用性:Unix,Windows。

Availability: Unix.

Availability: Unix.

2.7 版的新Function。

Availability: Unix.

2.7 版的新Function。

Availability: Unix.

可用性:Unix,Windows 的大多数版本。

可用性:Unix,Windows 的大多数版本。

Note

在某些平台上,包括 FreeBSD 和 Mac OS X,设置environ可能会导致内存泄漏。请参阅系统文档以获取 putenv。

如果支持putenv(),则对os.environ中项目的分配将自动转换为对putenv()的相应调用;但是,对putenv()的调用不会更新os.environ,因此实际上最好分配给os.environ的项。

Availability: Unix.

Availability: Unix.

Availability: Unix.

Availability: Unix.

2.2 版中的新Function。

Note

在 Mac OS X 上,* groups *的长度不得超过系统定义的有效组 ID 的最大数量,通常为 16.有关getgroups()的信息,可能无法pass调用 setgroups()返回相同的组列表,请参见getgroups()的文档。 。

Availability: Unix.

Availability: Unix.

Availability: Unix.

Availability: Unix.

2.7 版的新Function。

Availability: Unix.

2.7 版的新Function。

Availability: Unix.

Availability: Unix.

2.4 版的新Function。

Availability: Unix.

Availability: Unix.

可用性:Unix,Windows。

可用性:Unix,Windows。

可用性:Unix 的最新版本。

如果支持unsetenv(),则删除os.environ中的项目会自动转换为对unsetenv()的相应调用;但是,对unsetenv()的调用不会更新os.environ,因此实际上最好删除os.environ的项。

可用性:Unix,Windows 的大多数版本。

15.1.2. 文件对象创建

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

可用性:Unix,Windows。

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

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

可用性:Unix,Windows。

从 2.6 版开始不推荐使用:此Function已过时。使用subprocess模块。尤其要检查用子流程模块替换旧Function部分。

在版本 2.0 中更改:此Function在 Windows 的早期版本的 Python 中无法可靠地工作。这是由于使用了 Windows 随附的库中的_popen()函数。较新版本的 Python 不使用 Windows 库中的无效实现。

可用性:Unix,Windows。

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

从 2.6 版开始不推荐使用:所有popen*()函数都已过时。使用subprocess模块。

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

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

这些方法无法从子进程中检索退出状态。控制 Importing 和输出流并获取返回码的唯一方法是使用subprocess模块;否则,将不再显示此信息。这些仅在 Unix 上可用。

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

从 2.6 版开始不推荐使用:此Function已过时。使用subprocess模块。尤其要检查用子流程模块替换旧Function部分。

可用性:Unix,Windows。

2.0 版中的新Function。

从 2.6 版开始不推荐使用:此Function已过时。使用subprocess模块。尤其要检查用子流程模块替换旧Function部分。

可用性:Unix,Windows。

2.0 版中的新Function。

从 2.6 版开始不推荐使用:此Function已过时。使用subprocess模块。尤其要检查用子流程模块替换旧Function部分。

可用性:Unix,Windows。

2.0 版中的新Function。

(请注意,child_stdin, child_stdout, and child_stderr是从子进程的角度命名的,因此* child_stdin *是子级的标准 Importing.)

使用相同名称的函数在popen2模块中也可以使用此Function,但是这些函数的返回值具有不同的 Sequences。

15.1.3. 文件 Descriptors 操作

这些Function对使用文件 Descriptors 引用的 I/O 流起作用。

文件 Descriptors 是与当前进程已打开的文件相对应的小整数。例如,标准 Importing 通常是文件 Descriptors0,标准输出是 1,标准错误是 2.然后,进程打开的其他文件将被分配 3、4、5,依此类推。名称“文件 Descriptors”具有欺骗性;在 Unix 平台上,套接字和管道也由文件 Descriptors 引用。

必要时,可以使用fileno()方法获取与文件对象关联的文件 Descriptors。请注意,直接使用文件 Descriptors 将忽略文件对象方法,而忽略诸如数据内部缓冲之类的方面。

可用性:Unix,Windows。

Note

此函数用于低级 I/O,并且必须应用于os.open()pipe()返回的文件 Descriptors。要关闭内置函数open()popen()fdopen()返回的“文件对象”,请使用其close()方法。

for fd in xrange(fd_low, fd_high):
    try:
        os.close(fd)
    except OSError:
        pass

可用性:Unix,Windows。

2.6 版的新Function。

可用性:Unix,Windows。

可用性:Unix,Windows。

Availability: Unix.

2.6 版的新Function。

Availability: Unix.

2.6 版的新Function。

Availability: Unix.

Note

此Function在 MacOS 上不可用。

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

Availability: Unix.

可用性:Unix,Windows。

Availability: Unix.

如果您从 Python 文件对象* f 开始,请先执行f.flush(),然后再执行os.fsync(f.fileno()),以确保将与 f *关联的所有内部缓冲区都写入磁盘。

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

Availability: Unix.

可用性:Unix,Windows。

可用性:Windows,Unix。

2.5 版的新Function。

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

可用性:Unix,Windows。

Note

此Function适用于低级 I/O。为了正常使用,请使用内置函数open(),该函数使用read()write()方法(以及更多方法)返回“文件对象”。要将文件 Descriptors 包装在“文件对象”中,请使用fdopen()

可用性:某些 Unix 风格。

可用性:Unix,Windows。

可用性:Unix,Windows。

Note

此函数用于低级 I/O,并且必须应用于os.open()pipe()返回的文件 Descriptors。要读取内置函数open()popen()fdopen()sys.stdin返回的“文件对象”,请使用其read()readline()方法。

Availability: Unix.

Availability: Unix.

Availability: Unix.

可用性:Unix,Windows。

Note

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

15.1.3.1. open()标志常量

以下常量是open()函数的* flags 参数的选项。可以使用按位或运算符|组合它们。其中一些Function并非在所有平台上都可用。有关其可用性和使用的说明,请参考 Unix 上的 open(2)*手册页或 Windows 上的the MSDN

15.1.4. 文件和目录

可用性:Unix,Windows。

Note

使用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()

Note

即使access()表示 I/O 操作也可能失败,尤其是对于网络文件系统上的操作,其权限语义可能超出常规的 POSIX 权限位模型。

可用性:Unix,Windows。

Availability: Unix.

2.3 版的新Function。

可用性:Unix,Windows。

可用性:Unix,Windows。

2.3 版的新Function。

Availability: Unix.

2.6 版的新Function。

2.2 版中的新Function。

可用性:Unix,Windows。

Note

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

Availability: Unix.

Availability: Unix.

2.6 版的新Function。

Availability: Unix.

2.6 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

可用性:Unix,Windows。

在版本 2.3 中进行了更改:在 Windows NT/2k/XP 和 Unix 上,如果* path *是 Unicode 对象,则结果将是 Unicode 对象的列表。无法解码的文件名仍将作为字符串对象返回。

Availability: Unix.

FIFO 是可以像常规文件一样进行访问的管道。 FIFO 一直存在直到被删除(例如os.unlink())。通常,FIFO 用作“Client 端”和“服务器”类型的进程之间的集合点:服务器打开 FIFO 进行读取,而 Client 端打开 FIFO 进行写入。请注意,mkfifo()不会打开 FIFO,它只会创建集合点。

2.3 版的新Function。

2.3 版的新Function。

2.3 版的新Function。

2.3 版的新Function。

在某些系统上,* mode 被忽略。使用它时,当前的 umask 值将首先被屏蔽掉。如果设置了除最后 9 个之外的其他位(即 mode *的八进制表示形式的最后 3 位),则它们的含义取决于平台。在某些平台上,它们将被忽略,您应该显式调用chmod()进行设置。

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

可用性:Unix,Windows。

Note

如果要创建的路径元素包含os.pardir,则makedirs()会感到困惑。

版本 1.5.2 中的新Function。

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

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

Availability: Unix.

在 2.6 版中进行了更改:如果* path *是 Unicode 对象,则结果也将是 Unicode 对象。

Availability: Unix.

可用性:Unix,Windows。

版本 1.5.2 中的新Function。

可用性:Unix,Windows。

版本 1.5.2 中的新Function。

Note

如果您缺少删除叶子目录或文件所需的权限,则使用新的目录结构时此Function可能会失败。

可用性:Unix,Windows。

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

在版本 2.3 中进行了更改:如果stat_float_times()返回True,则时间值将 Float,以秒为单位。如果系统支持,可能会报告几分之一秒。有关更多讨论,请参见stat_float_times()

在某些 Unix 系统(例如 Linux)上,以下属性也可能可用:

在其他 Unix 系统(例如 FreeBSD)上,以下属性可能可用(但只有在 root try使用它们时才可以填写):

在 RISCOS 系统上,以下属性也可用:

Note

st_atimest_mtimest_ctime属性的确切含义和分辨率取决于 os 和文件系统。例如,在使用 FAT 或 FAT32 文件系统的 Windows 系统上,st_mtime具有 2 秒的分辨率,而st_atime仅具有 1 天的分辨率。有关详细信息,请参见您的 os 文档。

为了向后兼容,还可以使用至少 10 个整数的 Tuples 来访问stat()的返回值,以st_modest_inost_devst_nlinkst_uidst_gidst_size的 Sequences 提供stat结构的最重要(且可移植)的成员。 ,st_atimest_mtimest_ctime。某些实现可能在末尾添加更多项。

标准模块stat定义了对从stat结构中提取信息有用的函数和常量。 (在 Windows 上,某些项目填充有伪值.)

Example:

>>> 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

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

在版本 2.5 中更改:Python 现在默认返回浮点值。不能与浮点时间戳一起正确使用的应用程序可以使用此Function来还原旧的行为。

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

建议仅在程序启动时在* __ main __ *模块中更改此设置。库永远不要更改此设置。如果应用程序使用的库在处理浮点时间戳后无法正常工作,则该应用程序应关闭该Function,直到更正该库为止。

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

Availability: Unix.

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

Availability: Unix.

Warning

使用tempnam()很容易受到符号链接攻击;考虑改用tmpfile()(第文件对象创建节)。

可用性:Unix,Windows。

Warning

使用tmpnam()很容易受到符号链接攻击;考虑改用tmpfile()(第文件对象创建节)。

可用性:Unix,Windows。但是,该Function可能不应该在 Windows 上使用:Microsoft 的tmpnam()实现始终在当前驱动器的根目录中创建一个名称,并且对于临时文件而言,这通常是一个较差的位置(取决于特权,您甚至可能不会能够使用该名称打开文件)。

可用性:Unix,Windows。

在版本 2.0 中更改:增加了对None的支持* times *。

可用性:Unix,Windows。

如果可选参数* topdown True或未指定,则将在其任何子目录的三 Tuples 之前生成目录的三 Tuples(目录是自上而下生成的)。如果 topdown False,则在其所有子目录的三 Tuples 之后生成目录的三 Tuples(目录是自下而上生成的)。不管 topdown *的值如何,在生成目录及其子目录的 Tuples 之前,都将检索子目录的列表。

当* topdown True时,调用者可以就地修改 dirnames 列表(也许使用del或切片分配),而walk()将仅递归到其名称保留在 dirnames 中的子目录中;这可用于修剪搜索,强加特定的访问 Sequences,甚至在调用方再次恢复walk()之前,甚至通知walk()有关呼叫者创建或重命名的目录。当 topdown False时修改 dirnames 对步行的行为没有影响,因为在自下而上模式下, dirnames 中的目录是在生成 dirpath *本身之前生成的。

默认情况下,来自listdir()调用的错误将被忽略。如果指定了可选参数* onerror *,则它应该是一个函数。它将使用一个参数OSError实例进行调用。它可以报告错误以 continue 进行遍历,或者引发异常以中止遍历。请注意,文件名可用作异常对象的filename属性。

默认情况下,walk()不会进入解析为目录的符号链接。在支持链接的系统上,将* followlinks *设置为True以访问符号链接指向的目录。

2.6 版的新Function:* followlinks *参数。

Note

请注意,如果链接指向自身的父目录,则将* followlinks *设置为True会导致无限递归。 walk()不会跟踪它已经访问过的目录。

Note

如果传递相对路径名,请不要在恢复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 版的新Function。

15.1.5. 流程 Management

这些Function可用于创建和 Management 过程。

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

可用性:Unix,Windows。

当前过程将立即替换。打开文件对象和 Descriptors 不会刷新,因此,如果这些打开文件上有缓冲数据,则应在调用exec*函数之前使用sys.stdout.flush()os.fsync()刷新它们。

exec*函数的“ l”和“ v”变体在命令行参数的传递方式上有所不同。如果在编写代码时参数数量固定,则“ l”变体可能是最容易使用的;各个参数只是成为execl*()函数的附加参数。当参数的数量可变时,“ v”变体很好,参数以列表或 Tuples 的形式作为* args *参数传递。在这两种情况下,子进程的参数都应以正在运行的命令的名称开头,但这不是强制性的。

在末尾(execlp()execlpe()execvp()execvpe())附近包含“ p”的变体将使用 PATH环境变量来定位程序* file *。当替换环境时(使用exec*e变体中的一种,在下一段中讨论),新环境将用作 PATH变量的源。其他变体execl()execle()execv()execve()不会使用 PATH变量来定位可执行文件; * path *必须包含适当的绝对或相对路径。

对于execle()execlpe()execve()execvpe()(请注意,所有这些都以“ e”结尾),* env *参数必须是用于定义新进程的环境变量的 Map(使用这些变量代替当前变量)过程的环境);函数execl()execlp()execv()execvp()都使新进程继承当前进程的环境。

可用性:Unix,Windows。

可用性:Unix,Windows。

Note

退出的标准方式是sys.exit(n)_exit()通常只应在fork()之后的子进程中使用。

定义了以下退出代码,并且可以与_exit()一起使用,尽管它们不是必需的。这些通常用于用 Python 编写的系统程序,例如邮件服务器的外部命令传递程序。

Note

其中有些可能并非在所有 Unix 平台上都可用,因为存在一些差异。这些常量是在基础平台定义的地方定义的。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

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

Warning

有关将 SSL 模块与 fork()结合使用的应用程序,请参见ssl

Availability: Unix.

可用性:某些 Unix 风格。

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

2.7 版的新Function:Windows 支持

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

Availability: Unix.

(请注意,subprocess模块提供了更强大的工具来生成新进程并检索其结果;使用该模块优于使用这些Function。尤其是检查用子流程模块替换旧Function部分。)

如果* mode P_NOWAIT,则此函数返回新进程的进程 ID;否则,返回 0.如果 mode P_WAIT,则返回正常退出的进程的退出代码,或-signal,其中 signal *是杀死进程的 signal。在 Windows 上,进程 ID 实际上是进程句柄,因此可以与waitpid()函数一起使用。

spawn*函数的“ l”和“ v”变体在命令行参数的传递方式上有所不同。如果在编写代码时参数数量固定,则“ l”变体可能是最容易使用的;各个参数只是成为spawnl*()函数的附加参数。当参数的数量可变时,“ v”变体很好,参数以列表或 Tuples 的形式作为* args *参数传递。无论哪种情况,子进程的参数都必须以正在运行的命令的名称开头。

在末尾(spawnlp()spawnlpe()spawnvp()spawnvpe())附近包含第二个“ p”的变体将使用 PATH环境变量来定位程序* file *。当替换环境时(使用spawn*e变体中的一种,在下一段中讨论),新环境将用作 PATH变量的源。其他变体spawnl()spawnle()spawnv()spawnve()不会使用 PATH变量来定位可执行文件; * path *必须包含适当的绝对或相对路径。

对于spawnle()spawnlpe()spawnve()spawnvpe()(请注意,所有这些都以“ e”结尾),* env 参数必须是用于定义新进程的环境变量的 Map(使用它们代替当前变量)过程的环境);函数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 版中的新Function。

可用性:Unix,Windows。

1.6 版中的新Function。

可用性:Unix,Windows。

1.6 版中的新Function。

Availability: Windows.

1.6 版中的新Function。

如果未指定* operation *或'open',则类似于在 Windows 资源 Management 器中双击文件,或从交互式命令 Shell 将文件名作为 start 命令的参数来提供:使用任何命令打开文件应用程序(如果有)与其 extensions 相关联。

当给出另一个* operation *时,它必须是一个“命令动词”,它指定应该对文件执行的操作。 Microsoft 记录的常用动词是'print''edit'(将在文件上使用)以及'explore''find'(将在目录上使用)。

关联的应用程序启动后,startfile()返回。没有选择 await 应用程序关闭的选项,也没有办法检索应用程序的退出状态。 * path *参数是相对于当前目录的。如果要使用绝对路径,请确保第一个字符不是斜杠('/');基本的 Win32 ShellExecute()函数不能正常工作。使用os.path.normpath()函数来确保路径已正确地为 Win32 编码。

Availability: Windows.

2.0 版中的新Function。

2.5 版中的新Function:* operation *参数。

在 Unix 上,返回值是以wait()指定的格式编码的进程的退出状态。请注意,POSIX 没有指定 C system()函数的返回值的含义,因此 Python 函数的返回值与系统有关。

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

subprocess模块提供了更强大的Function来生成新流程并检索其结果;使用该模块优于使用此Function。有关一些有用的食谱,请参见subprocess文档中的用子流程模块替换旧Function部分。

可用性:Unix,Windows。

可用性:Unix,Windows

Availability: Unix.

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

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

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

在 Windows 上:await 进程句柄* pid 给定的进程完成,然后返回包含 pid 的 Tuples,其退出状态向左移 8 位(这种移位使跨平台使用该函数更加容易)。小于或等于0 pid 在 Windows 上没有特殊含义,并引发异常。整数 options *的值无效。 * pid *可以引用其 ID 已知的任何进程,不一定是子进程。用P_NOWAIT调用的spawn*函数返回合适的进程句柄。

Availability: Unix.

2.5 版的新Function。

Availability: Unix.

2.5 版的新Function。

Availability: Unix.

可用性:一些 Unix 系统。

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

以下函数将由system()wait()waitpid()返回的过程状态代码作为参数。它们可用于确定过程的布置。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

Availability: Unix.

Availability: Unix.

Availability: Unix.

Availability: Unix.

Availability: Unix.

15.1.6. 杂项系统信息

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

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

Availability: Unix

Availability: Unix.

Availability: Unix.

2.3 版的新Function。

Availability: Unix.

Availability: Unix.

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

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

2.2 版中的新Function。

2.4 版的新Function。

15.1.7. 杂项Function

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

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

2.4 版的新Function。

首页