15.1. os —其他 os 接口

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

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

  • Python 的所有依赖于 os 的内置模块的设计都是这样,只要有相同的Function可用,它就使用相同的接口。例如,函数os.stat(path)以相同格式(恰好起源于 POSIX 接口)返回有关* path *的统计信息。

  • 特定于 os 的 extensions 也可以passos模块获得,但是使用 extensions 当然会威胁到可移植性。

  • “ Availability:Unix”Comments 表示此Function在 Unix 系统上很常见。它对在特定 os 上的存在不做任何语句。

  • 如果没有另外说明,则在 Unix 内核上构建的 Mac OS X 支持所有要求“可用性:Unix”的Function。

Note

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

  • exception os. error

    • 内置OSErrorexception 的别名。
  • os. name

    • 导入的 os 相关模块的名称。当前已注册以下名称:'posix''nt''os2''ce''java''riscos'

See also

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

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

15.1.1. Process参数

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

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

首次导入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()时,也未设置环境变量。

  • os. chdir(* path *)

  • os. fchdir(* fd *)

  • os. getcwd ( )

  • os. ctermid ( )

    • 返回与该过程的控制终端相对应的文件名。

Availability: Unix.

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

Availability: Unix.

  • os. geteuid ( )
    • 返回当前进程的有效用户标识。

Availability: Unix.

  • os. getgid ( )
    • 返回当前进程的真实组 ID。

Availability: Unix.

  • os. getgroups ( )
    • 返回与当前进程关联的补充组 ID 的列表。

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

  • os. initgroups(* username gid *)
    • 调用系统 initgroups()初始化包含指定用户名是成员的所有组以及指定组 ID 的组访问列表。

Availability: Unix.

2.7 版的新Function。

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

Availability: Unix.

  • os. getpgid(* pid *)
    • 返回进程 ID 为* pid 的进程的进程组 ID。如果 pid *为 0,则返回当前进程的进程组 ID。

Availability: Unix.

2.3 版的新Function。

  • os. getpgrp ( )
    • 返回当前进程组的 ID。

Availability: Unix.

  • os. getpid ( )
    • 返回当前进程 ID。

可用性:Unix,Windows。

  • os. getppid ( )
    • 返回父进程的 ID。

Availability: Unix.

  • os. getresuid ( )
    • 返回一个 Tuples(ruid,euid,suid),表示当前进程的真实,有效和已保存的用户 ID。

Availability: Unix.

2.7 版的新Function。

  • os. getresgid ( )
    • 返回一个 Tuples(rgid,egid,sgid),表示当前进程的真实,有效和已保存的组 ID。

Availability: Unix.

2.7 版的新Function。

  • os. getuid ( )
    • 返回当前进程的真实用户 ID。

Availability: Unix.

  • os. getenv(* varname * [,* value *])
    • 返回环境变量* varname 的值(如果存在)或 value *(如果不存在)。 默认为None

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

  • os. putenv(* varname value *)
    • 将名为* varname 的环境变量设置为字符串 value *。对环境的此类更改会影响以os.system()popen()fork()execv()开头的子流程。

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

Note

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

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

  • os. setegid(* egid *)
    • 设置当前进程的有效组 ID。

Availability: Unix.

  • os. seteuid(* euid *)
    • 设置当前进程的有效用户 ID。

Availability: Unix.

  • os. setgid(* gid *)
    • 设置当前进程的组 ID。

Availability: Unix.

  • os. setgroups(* groups *)
    • 将与当前进程关联的补充组 ID 列表设置为* groups *。 * groups *必须是一个序列,并且每个元素都必须是标识一个组的整数。此操作通常仅对超级用户可用。

Availability: Unix.

2.2 版中的新Function。

Note

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

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

Availability: Unix.

  • os. setpgid(* pid pgrp *)
    • 调用系统调用setpgid()将 ID 为* pid 的进程的进程组 ID 设置为 ID 为 pgrp *的进程组。有关语义,请参见 Unix 手册。

Availability: Unix.

  • os. setregid(* rgid egid *)
    • 设置当前进程的真实和有效的组 ID。

Availability: Unix.

  • os. setresgid(* rgid egid sgid *)
    • 设置当前进程的真实,有效和已保存的组 ID。

Availability: Unix.

2.7 版的新Function。

  • os. setresuid(* ruid euid suid *)
    • 设置当前进程的真实,有效和已保存的用户 ID。

Availability: Unix.

2.7 版的新Function。

  • os. setreuid(* ruid euid *)
    • 设置当前进程的真实有效用户 ID。

Availability: Unix.

  • os. getsid(* pid *)
    • 拨打系统电话getsid()。有关语义,请参见 Unix 手册。

Availability: Unix.

2.4 版的新Function。

  • os. setsid ( )
    • 拨打系统电话setsid()。有关语义,请参见 Unix 手册。

Availability: Unix.

  • os. setuid(* uid *)
    • 设置当前进程的用户标识。

Availability: Unix.

  • os. strerror(* code *)
    • 返回与* code *中的错误代码相对应的错误消息。在给定未知错误号的情况下,strerror()返回NULL的平台上,引发ValueError

可用性:Unix,Windows。

  • os. umask(* mask *)
    • 设置当前的数字 umask 并返回上一个 umask。

可用性:Unix,Windows。

  • os. uname ( )
    • 返回一个 5Tuples,其中包含标识当前 os 的信息。Tuples 包含 5 个字符串:(sysname, nodename, release, version, machine)。某些系统将节点名截断为 8 个字符或开头部分;获取主机名的更好方法是socket.gethostname()甚至socket.gethostbyaddr(socket.gethostname())

可用性:Unix 的最新版本。

  • os. unsetenv(* varname *)

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

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

15.1.2. 文件对象创建

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

  • os. fdopen(* fd * [,* mode * [,* bufsize *]])
    • 返回连接到文件 Descriptors* fd *的打开文件对象。 * mode bufsize 参数的含义与内置open()函数的相应参数的含义相同。如果fdopen()引发异常,则 fd *保持不变(未关闭)。

可用性:Unix,Windows。

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

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

  • os. popen(* command * [,* mode * [,* bufsize *]])
    • 打开往返于* command 的管道。返回值是连接到管道的打开文件对象,可以根据 mode *是'r'(默认值)还是'w'进行读取或写入。 * bufsize *参数与内置open()函数的相应参数具有相同的含义。该命令的退出状态(以为wait()指定的格式编码)可用作文件对象close()方法的返回值,但退出状态为零(无错误终止)时,将返回None

可用性:Unix,Windows。

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

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

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

可用性: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有关的可能死锁条件的讨论,请参见流控制问题

  • os. popen2(* cmd * [,* mode * [,* bufsize *]])
    • 执行* cmd *作为 subprocess,并返回文件对象(child_stdin, child_stdout)

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

可用性:Unix,Windows。

2.0 版中的新Function。

  • os. popen3(* cmd * [,* mode * [,* bufsize *]])
    • 执行* cmd *作为 subprocess,并返回文件对象(child_stdin, child_stdout, child_stderr)

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

可用性:Unix,Windows。

2.0 版中的新Function。

  • os. popen4(* cmd * [,* mode * [,* bufsize *]])
    • 执行* cmd *作为 subprocess,并返回文件对象(child_stdin, child_stdout_and_stderr)

从 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 将忽略文件对象方法,而忽略诸如数据内部缓冲之类的方面。

  • os. close(* fd *)
    • 关闭文件 Descriptors* fd *。

可用性:Unix,Windows。

Note

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

  • os. closerange(* fd_low fd_high *)
    • 关闭所有文件 Descriptors,从* fd_low (包括)到 fd_high *(不包括),忽略错误。相当于:
for fd in xrange(fd_low, fd_high):
    try:
        os.close(fd)
    except OSError:
        pass

可用性:Unix,Windows。

2.6 版的新Function。

  • os. dup(* fd *)
    • 返回文件 Descriptors* fd *的副本。

可用性:Unix,Windows。

  • os. dup2(* fd fd2 *)
    • 将文件 Descriptors* fd 复制到 fd2 *,如有必要,先关闭后者。

可用性:Unix,Windows。

  • os. fchmod(* fd mode *)
    • 将* fd 给定的文件模式更改为数字 mode 。请参阅chmod()的文档,以获取 mode *的可能值。

Availability: Unix.

2.6 版的新Function。

  • os. fchown(* fd uid gid *)
    • 将* fd 给定的文件的所有者和组 ID 更改为数字 uid gid *。要使其中一个 ID 保持不变,请将其设置为-1.

Availability: Unix.

2.6 版的新Function。

  • os. fdatasync(* fd *)
    • 强制使用 filedescriptor * fd *将文件写入磁盘。不强制更新元数据。

Availability: Unix.

Note

此Function在 MacOS 上不可用。

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

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

Availability: Unix.

  • os. fstat(* fd *)
    • 文件 Descriptors* fd *的返回状态,例如stat()

可用性:Unix,Windows。

  • os. fstatvfs(* fd *)
    • 返回有关包含与文件 Descriptors* fd *关联的文件的文件系统的信息,例如statvfs()

Availability: Unix.

  • os. fsync(* fd *)
    • 强制使用 filedescriptor * fd *将文件写入磁盘。在 Unix 上,这将调用本地fsync()函数;在 Windows 上,MS _commit()Function。

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

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

  • os. ftruncate(* fd length *)
    • 截断与文件 Descriptors* fd 对应的文件,以使其最大为 length *个字节。

Availability: Unix.

  • os. isatty(* fd *)

    • 如果文件 Descriptors* fd *已打开并连接到 tty(-like)设备,则返回True,否则返回False
  • os. lseek(* fd pos how *)

    • 将文件 Descriptors* fd *的当前位置设置为 position * pos ,由 how *修改:SEEK_SET0以设置相对于文件开头的位置; SEEK_CUR1相对于当前位置进行设置; SEEK_END2相对于文件末尾进行设置。从头开始以字节为单位返回新的光标位置。

可用性:Unix,Windows。

  • os. SEEK_SET
  • os. SEEK_CUR
  • os. SEEK_END
    • lseek()函数的参数。它们的值分别为 0、1 和 2.

可用性:Windows,Unix。

2.5 版的新Function。

  • os. open(* file flags * [,* mode *])
    • 打开文件* file 并根据 flags 设置各种标记,并根据* mode 设置其模式。默认的 mode *是0777(八进制),当前的 umask 值首先被屏蔽掉。返回新打开文件的文件 Descriptors。

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

可用性:Unix,Windows。

Note

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

  • os. openpty ( )
    • 打开一个新的伪终端对。分别为 pty 和 tty 返回Pair文件 Descriptors(master, slave)。对于(稍微)更可移植的方法,请使用pty模块。

可用性:某些 Unix 风格。

  • os. pipe ( )
    • 创建一个管道。返回Pair分别可用于读取和写入的文件 Descriptors(r, w)

可用性:Unix,Windows。

  • os. read(* fd n *)
    • 从文件 Descriptors* fd 读取最多 n 个字节。返回包含读取的字节的字符串。如果已到达 fd *所引用文件的末尾,则返回一个空字符串。

可用性:Unix,Windows。

Note

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

  • os. tcgetpgrp(* fd *)
    • 返回与* fd *(由os.open()返回的打开文件 Descriptors)给定的终端关联的进程组。

Availability: Unix.

  • os. tcsetpgrp(* fd pg *)
    • 将与* fd (由os.open()返回的打开文件 Descriptors)给定的终端相关联的进程组设置为 pg *。

Availability: Unix.

  • os. ttyname(* fd *)
    • 返回一个字符串,该字符串指定与文件 Descriptors* fd 关联的终端设备。如果 fd *没有与终端设备关联,则会引发异常。

Availability: Unix.

  • os. write(* fd str *)
    • 将字符串* str 写入文件 Descriptors fd *。返回实际写入的字节数。

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

  • 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

    • 上面的常量是 extensions,如果 C 库未定义它们则不存在。

15.1.4. 文件和目录

  • os. access(* path mode *)
    • 使用真实的 uid/gid 来测试对* path 的访问。请注意,大多数操作将使用有效的 uid/gid,因此可以在 suid/sgid 环境中使用此例程来测试调用用户是否具有对 path 的指定访问权限。 * mode 应该为F_OK以测试 path 的存在,或者可以为R_OKW_OKX_OK中的一个或多个以进行包含性测试权限。如果允许访问,则返回True,如果不允许则返回False。有关更多信息,请参见 Unix 手册页 access(2)

可用性: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 权限位模型。

  • 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 *)
    • 将当前工作目录更改为文件 Descriptors* fd *表示的目录。Descriptors 必须引用打开的目录,而不是打开的文件。

Availability: Unix.

2.3 版的新Function。

  • os. getcwd ( )
    • 返回表示当前工作目录的字符串。

可用性:Unix,Windows。

  • os. getcwdu ( )
    • 返回表示当前工作目录的 Unicode 对象。

可用性:Unix,Windows。

2.3 版的新Function。

Availability: Unix.

2.6 版的新Function。

  • os. chroot(* path *)
    • 将当前进程的根目录更改为* path *。可用性:Unix。

2.2 版中的新Function。

可用性:Unix,Windows。

Note

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

  • os. chown(* path uid gid *)
    • 将* path 的所有者和组标识更改为数字 uid gid *。要使其中一个 ID 保持不变,请将其设置为-1.

Availability: Unix.

  • os. lchflags(* path flags *)
    • 将* path 的标志设置为数字 flags *,例如chflags(),但不要跟随符号链接。

Availability: Unix.

2.6 版的新Function。

  • os. lchmod(* path mode *)
    • 将* path 的模式更改为数字 mode 。如果 path 是符号链接,则这会影响符号链接而不是目标。请参阅chmod()的文档,以获取 mode *的可能值。

Availability: Unix.

2.6 版的新Function。

  • os. lchown(* path uid gid *)
    • 将* path 的所有者和组标识更改为数字 uid gid *。此Function将不遵循符号链接。

Availability: Unix.

2.3 版的新Function。

  • os. link(* source link_name *)
    • 创建一个指向* source 的硬链接,名为 link_name *。

Availability: Unix.

  • os. listdir(* path *)
    • 返回一个列表,其中包含* path *给出的目录中条目的名称。该列表按任意 Sequences 排列。即使目录中存在特殊条目'.''..',它也不包括在内。

可用性:Unix,Windows。

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

  • os. lstat(* path *)

    • 在给定路径上执行等效于lstat()系统调用。与stat()相似,但不遵循符号链接。在不支持符号链接的平台上,这是stat()的别名。
  • os. mkfifo(* path * [,* mode *])

    • 使用数字模式* mode 创建名为 path 的 FIFO(命名管道)。默认模式*为0666(八进制)。当前的 umask 值首先从该模式中屏蔽掉。

Availability: Unix.

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

  • os. mknod(* filename * [,* mode = 0600 * [,* device = 0 *]])
    • 创建一个名为* filename *的文件系统节点(文件,设备专用文件或命名管道)。 * mode 指定使用权限和要创建的节点类型,将它们与stat.S_IFREGstat.S_IFCHRstat.S_IFBLKstat.S_IFIFO(这些常量在stat中可用)之一组合(按位或)。对于stat.S_IFCHRstat.S_IFBLK device *定义新创建的设备专用文件(可能使用os.makedev()),否则将被忽略。

2.3 版的新Function。

  • os. major(* device *)
    • 从原始设备号(通常是statst_devst_rdev字段)中提取设备主 Numbers。

2.3 版的新Function。

  • os. minor(* device *)
    • 从原始设备号(通常是statst_devst_rdev字段)中提取设备次设备号。

2.3 版的新Function。

  • os. makedev(主要次要)
    • 从主要和次要设备号组成一个原始设备号。

2.3 版的新Function。

  • os. mkdir(* path * [,* mode *])
    • 用数字模式* mode 创建一个名为 path 的目录。默认 mode *为0777(八进制)。如果目录已经存在,则引发OSError

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

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

可用性:Unix,Windows。

  • os. makedirs(* path * [,* mode *])
    • 递归目录创建Function。类似于mkdir(),但是使所有中间级目录都包含叶子目录。如果叶目录已经存在或无法创建,则引发error异常。默认* mode *为0777(八进制)。

Note

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

版本 1.5.2 中的新Function。

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

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

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

Availability: Unix.

  • os. pathconf_names

    • pathconf()fpathconf()接受的字典 Map 名称到主机 os 为此名称定义的整数值。这可用于确定系统已知的名称集。可用性:Unix。
  • os. readlink(* path *)

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

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

Availability: Unix.

  • os. remove(* path *)
    • 删除(删除)文件* path 。如果 path *是目录,则引发OSError;请参阅下面的rmdir()以删除目录。这与下面记录的unlink()函数相同。在 Windows 上,try删除正在使用的文件会引发异常。在 Unix 上,目录条目已删除,但是分配给文件的存储空间不再可用,直到不再使用原始文件为止。

可用性:Unix,Windows。

  • os. removedirs(* path *)
    • 递归删除目录。像rmdir()一样工作,不同之处在于,如果成功删除了叶目录,则removedirs()会try依次删除* path *中提到的每个父目录,直到引发错误为止(该错误会被忽略,因为它通常意味着父目录不为空)。例如,os.removedirs('foo/bar/baz')将首先删除目录'foo/bar/baz',然后删除'foo/bar''foo'(如果它们为空)。如果无法成功删除叶目录,则引发OSError

版本 1.5.2 中的新Function。

  • os. rename(* src dst *)
    • 将文件或目录* src 重命名为 dst 。如果 dst 是目录,则将引发OSError。在 Unix 上,如果 dst 存在并且是文件,则在用户具有权限的情况下将以静默方式替换它。如果 src dst 在不同的文件系统上,则该操作在某些 Unix 风格上可能会失败。如果成功,重命名将是原子操作(这是 POSIX 要求)。在 Windows 上,如果 dst *已经存在,则OSError将被引发,即使它是一个文件; * dst *命名现有文件时,可能无法实现原子重命名。

可用性:Unix,Windows。

  • os. renames(* old new *)
    • 递归目录或文件重命名Function。像rename()一样工作,除了首先try创建使新路径名良好所需的任何中间目录。重命名后,将使用removedirs()删除对应于旧名称最右边路径段的目录。

版本 1.5.2 中的新Function。

Note

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

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

可用性:Unix,Windows。

  • os. stat(* path *)
    • 在给定路径上执行等效于stat()系统调用。 (此函数遵循符号链接;要使用lstat()来设置符号链接的状态。)

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

  • st_mode-保护位,

  • st_ino-索引节点号,

  • 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,则时间值将 Float,以秒为单位。如果系统支持,可能会报告几分之一秒。有关更多讨论,请参见stat_float_times()

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

  • st_blocks-为文件分配的 512 字节块数

  • st_blksize-文件系统分块以实现高效的文件系统 I/O

  • st_rdev-设备类型(如果是 inode 设备)

  • st_flags-用户定义的文件标志

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

  • st_gen-文件生成号

  • st_birthtime-文件创建时间

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

  • st_ftype(文件类型)

  • st_attrs(属性)

  • st_obtype(对象类型)。

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

  • os. stat_float_times([* newvalue *])
    • 确定stat_result是否将时间戳表示为 Float 对象。如果* newvalue True,则将来对stat()的调用返回浮点数;如果它是False,则将来的调用返回 int 整数。如果Ellipsis newvalue *,则返回当前设置。

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

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

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

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

  • os. statvfs(* path *)
    • 在给定路径上执行statvfs()系统调用。返回值是一个对象,其属性描述给定路径上的文件系统,并与statvfs结构的成员相对应,即f_bsizef_frsizef_blocksf_bfreef_bavailf_filesf_ffreef_favailf_flagf_namemax

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

Availability: Unix.

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

  • os. symlink(* source link_name *)
    • 创建一个指向* source 的符号链接,名为 link_name *。

Availability: Unix.

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

Warning

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

可用性:Unix,Windows。

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

Warning

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

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

  • os. TMP_MAX

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

    • 删除(删除)文件* path *。该Function与remove()相同; unlink()名称是其传统的 Unix 名称。

可用性:Unix,Windows。

  • os. utime(* path times *)
    • 设置* path 指定的文件的访问和修改时间。如果 times None,则文件的访问时间和修改时间将设置为当前时间。 (效果类似于在路径上运行 Unix 程序 touch.)否则, times 必须是 2 元数字,格式为(atime, mtime),分别用于设置访问时间和修改时间。 。是否可以为 path *指定目录取决于 os 是否将目录实现为文件(例如 Windows 无法实现)。请注意,根据 os 记录访问和修改时间的分辨率,后续的stat()调用可能不会返回您在此处设置的确切时间。参见stat()

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

可用性:Unix,Windows。

  • os. walk(* top topdown = True onerror = None followlinks = False *)
    • pass自上而下或自下而上浏览目录树来生成目录树中的文件名。对于以目录* top 为根的树中的每个目录(包括 top *本身),它会生成一个三 Tuples(dirpath, dirnames, filenames)
  • dirpath *是一个字符串,是目录的路径。 * dirnames dirpath *中子目录名称的列表(不包括'.''..')。 * filenames dirpath 中非目录文件名称的列表。请注意,列表中的名称不包含路径成分。要获取 dirpath 中文件或目录的完整路径(以 top *开头),请执行os.path.join(dirpath, name)

如果可选参数* 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似乎将被忽略。

  • os. abort ( )
    • 生成一个SIGABRTsignal 到当前进程。在 Unix 上,默认行为是产生核心转储。在 Windows 上,该过程立即返回退出代码3。请注意,调用此函数将不会调用passsignal.signal()SIGABRT注册的 Pythonsignal 处理程序。

可用性: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 *)
    • 这些Function都执行一个新程序,以替换当前进程。他们不回来。在 Unix 上,新的可执行文件已加载到当前进程中,并且将具有与调用方相同的进程 ID。错误将被报告为OSError个 exception。

当前过程将立即替换。打开文件对象和 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。

  • os. _exit(* n *)
    • 退出状态为* n *的进程,而不调用清理处理程序,刷新 stdio 缓冲区等。

可用性:Unix,Windows。

Note

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

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

Note

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

  • os. EX_OK
    • 退出代码,表示未发生任何错误。

Availability: Unix.

2.3 版的新Function。

  • os. EX_USAGE
    • 退出代码,表示该命令使用不正确,例如,给出了错误数量的参数时。

Availability: Unix.

2.3 版的新Function。

  • os. EX_DATAERR
    • 退出代码,表示 Importing 数据不正确。

Availability: Unix.

2.3 版的新Function。

  • os. EX_NOINPUT
    • 退出代码,表示 Importing 文件不存在或不可读。

Availability: Unix.

2.3 版的新Function。

  • os. EX_NOUSER
    • 退出代码,表示指定的用户不存在。

Availability: Unix.

2.3 版的新Function。

  • os. EX_NOHOST
    • 退出代码,意味着指定的主机不存在。

Availability: Unix.

2.3 版的新Function。

  • os. EX_UNAVAILABLE
    • 退出代码,表示所需的服务不可用。

Availability: Unix.

2.3 版的新Function。

  • os. EX_SOFTWARE
    • 退出代码,表示检测到内部软件错误。

Availability: Unix.

2.3 版的新Function。

  • os. EX_OSERR
    • 退出代码,表示检测到 os 错误,例如无法分叉或创建管道。

Availability: Unix.

2.3 版的新Function。

  • os. EX_OSFILE
    • 退出代码,表示某些系统文件不存在,无法打开或发生其他错误。

Availability: Unix.

2.3 版的新Function。

  • os. EX_CANTCREAT
    • 退出代码,表示无法创建用户指定的输出文件。

Availability: Unix.

2.3 版的新Function。

  • os. EX_IOERR
    • 退出代码,表示对某些文件执行 I/O 时发生错误。

Availability: Unix.

2.3 版的新Function。

  • os. EX_TEMPFAIL
    • 退出代码,表示发生了暂时的故障。这表示可能并非 true 错误的内容,例如在重试操作期间无法构建的网络连接。

Availability: Unix.

2.3 版的新Function。

  • os. EX_PROTOCOL
    • 退出代码,表示协议交换是非法,无效或无法理解的。

Availability: Unix.

2.3 版的新Function。

  • os. EX_NOPERM
    • 退出代码,表示没有足够的权限执行该操作(但不适用于文件系统问题)。

Availability: Unix.

2.3 版的新Function。

  • os. EX_CONFIG
    • 退出代码,表示发生某种配置错误。

Availability: Unix.

2.3 版的新Function。

  • os. EX_NOTFOUND
    • 退出代码,其含义类似于“未找到条目”。

Availability: Unix.

2.3 版的新Function。

  • os. fork ( )
    • 分叉子进程。在子级中返回0,在父级中返回子级的进程 ID。如果发生错误,将引发OSError

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

Warning

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

Availability: Unix.

  • os. forkpty ( )
    • 使用新的伪终端作为子进程的控制终端,分叉子进程。返回Pair(pid, fd),其中* pid 在子代中是0,新子代的进程 ID 在父代中,而 fd *是伪终端的主端的文件 Descriptors。对于更便携的方法,请使用pty模块。如果发生错误,将引发OSError

可用性:某些 Unix 风格。

  • os. kill(* pid sig *)
    • 发送 signal* sig 到进程 pid *。主机平台上可用的特定 signal 的常量在signal模块中定义。

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

2.7 版的新Function:Windows 支持

  • os. killpg(* pgid sig *)
    • 将 signal* sig 发送到进程组 pgid *。

Availability: Unix.

2.3 版的新Function。

  • os. nice(增量)
    • 将* increment *添加到进程的“ niceness”中。返回新的美好。

Availability: Unix.

  • os. plock(* op *)
    • 将程序段锁定到内存中。 * op *(在<sys/lock.h>中定义)的值确定哪些段被锁定。

Availability: Unix.

  • os. popen ( ... )

  • os. popen2 ( ... )

  • os. popen3 ( ... )

  • os. popen4 ( ... )

    • 运行子进程,返回打开的管道进行通信。这些Function在文件对象创建部分中进行了描述。
  • 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模块提供了更强大的工具来生成新进程并检索其结果;使用该模块优于使用这些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。

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

可用性:Unix,Windows。

1.6 版中的新Function。

  • os. P_WAIT
    • spawn*系列函数的* mode 参数的可能值。如果将其指定为 mode *,则spawn*()函数将在新进程运行完成之前不返回,并且将返回运行成功的进程的退出代码,或者-signal(如果有 signal 终止了该进程)。

可用性:Unix,Windows。

1.6 版中的新Function。

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

Availability: Windows.

1.6 版中的新Function。

  • os. startfile(* path * [,* operation *])
    • 使用其关联的应用程序启动文件。

如果未指定* 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 *参数。

  • os. system(* command *)
    • 在子 Shell 程序中执行命令(字符串)。这是pass调用标准 C 函数system()实现的,并且具有相同的限制。对sys.stdin等的更改不会反映在已执行命令的环境中。

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

  • os. times ( )
    • 返回一个五 Tuples 的浮点数,以秒为单位指示累计(处理器或其他)时间。这些项目是:用户时间,系统时间,child 的用户时间,child 的系统时间以及从过去的固定点开始按该 Sequences 经过的实时时间。请参阅 Unix 手册页* times(2)*或相应的 Windows Platform API 文档。在 Windows 上,仅前两个项目被填充,其他项目为零。

可用性:Unix,Windows

  • os. wait ( )
    • await 子进程完成,并返回一个包含其 pid 和退出状态指示的 Tuples:一个 16 位数字,其低字节是杀死该进程的 signal 号,而其高字节是退出状态(如果 signal 数字为零);如果生成了核心文件,则设置低字节的高位。

Availability: Unix.

  • os. waitpid(* pid options *)
    • 此函数的详细信息在 Unix 和 Windows 上有所不同。

在 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*函数返回合适的进程句柄。

  • os. wait3(* options *)
    • waitpid()相似,不同之处在于未给出任何进程 ID 参数,并返回一个包含子进程 ID,退出状态指示和资源使用信息的 3 元素 Tuples。请参考resourcegetrusage()有关资源使用信息的详细信息。 option 参数与提供给waitpid()wait4()的参数相同。

Availability: Unix.

2.5 版的新Function。

  • os. wait4(* pid options *)
    • waitpid()相似,除了包含 3 个元素的 Tuples 之外,该 Tuples 包含子进程的 ID,退出状态指示和资源使用信息。请参考resourcegetrusage()有关资源使用信息的详细信息。 wait4()的参数与提供给waitpid()的参数相同。

Availability: Unix.

2.5 版的新Function。

  • os. WNOHANG
    • 如果没有立即可用的子进程状态,则waitpid()可以立即返回的选项。在这种情况下,该函数返回(0, 0)

Availability: Unix.

  • os. WCONTINUED
    • 如果子进程自上次报告其状态以来已从作业控制停止 continue 进行,则此选项将导致报告这些子进程。

可用性:一些 Unix 系统。

2.3 版的新Function。

  • os. WUNTRACED
    • 如果已停止子进程,但是自停止以来尚未报告其当前状态,则此选项将导致报告子进程。

Availability: Unix.

2.3 版的新Function。

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

  • os. WCOREDUMP(状态)
    • 如果为该进程生成了核心转储,则返回True,否则返回False

Availability: Unix.

2.3 版的新Function。

  • os. WIFCONTINUED(状态)
    • 如果从作业控制停止处 continue 执行该过程,则返回True,否则返回False

Availability: Unix.

2.3 版的新Function。

  • os. WIFSTOPPED(状态)
    • 如果进程已停止,则返回True,否则返回False

Availability: Unix.

  • os. WIFSIGNALED(状态)
    • 如果进程由于 signal 而退出,则返回True,否则返回False

Availability: Unix.

  • os. WIFEXITED(状态)
    • 如果进程使用* exit(2)*系统调用退出,则返回True,否则返回False

Availability: Unix.

  • os. WEXITSTATUS(状态)
    • 如果WIFEXITED(status)为 true,则将整数参数返回到* exit(2)*系统调用。否则,返回值将无意义。

Availability: Unix.

  • os. WSTOPSIG(状态)
    • 返回导致进程停止的 signal。

Availability: Unix.

  • os. WTERMSIG(状态)
    • 返回导致进程退出的 signal。

Availability: Unix.

15.1.6. 杂项系统信息

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

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

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

Availability: Unix

  • os. confstr_names
    • confstr()接受的字典 Map 名称到主机 os 为此名称定义的整数值。这可用于确定系统已知的名称集。

Availability: Unix.

  • os. getloadavg ( )
    • 返回过去 1、5 和 15 分钟内系统运行队列中的平均进程数,如果无法获得平均负载,则返回OSError

Availability: Unix.

2.3 版的新Function。

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

Availability: Unix.

  • os. sysconf_names
    • sysconf()接受的字典 Map 名称到主机 os 为此名称定义的整数值。这可用于确定系统已知的名称集。

Availability: Unix.

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

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

  • os. curdir

    • os 用来引用当前目录的常量字符串。对于 Windows 和 POSIX,这是'.'。也可以passos.path获得。
  • os. pardir

    • os 用来引用父目录的常量字符串。对于 Windows 和 POSIX,这是'..'。也可以passos.path获得。
  • os. sep

    • os 用来分隔路径名组件的字符。对于 POSIX,这是'/',对于 Windows 是'\\'请注意,仅了解这一点还不足以解析或连接路径名(使用os.path.split()os.path.join()),但是有时它很有用。也可以passos.path获得。
  • os. altsep

    • os 用来分隔路径名组件的替代字符;如果仅存在一个分隔符,则为None。在sep是反斜杠的 Windows 系统上,它设置为'/'。也可以passos.path获得。
  • os. extsep

    • 将基本文件名与 extensions 分开的字符;例如os.py中的'.'。也可以passos.path获得。

2.2 版中的新Function。

  • os. pathsep

    • os 通常用于分隔搜索路径组件(如 PATH)的字符,例如 POSIX 的':'或 Windows 的';'。也可以passos.path获得。
  • os. defpath

    • 如果环境没有'PATH'键,则exec*p*spawn*p*使用的默认搜索路径。也可以passos.path获得。
  • os. linesep

    • 在当前平台上用于分隔(或终止)行的字符串。对于 POSIX,这可以是单个字符,例如'\n';对于 Windows,可以是多个字符,例如'\r\n'。编写以文本模式打开的文件时(默认),请勿使用* os.linesep *作为行终止符;在所有平台上都使用一个'\n'代替。
  • os. devnull

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

2.4 版的新Function。

15.1.7. 杂项Function

  • os. urandom(* n *)
    • 返回适合加密使用的* n *个随机字节的字符串。

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

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

2.4 版的新Function。