Python 模块 OS

Python 模块 OS

Python 模块 os 可以访问操作系统(operating system)相关的特性。

os 模块为许多操作系统,如posic, nt, mac 提供了一个封装层(wrappers)。它提供的的接口(API)可以在各个系统之间通用,从而增加了代码的可移植性(portability)。尽管如此,并不是所有的函数都是通用的,例如许多进程管理的函数不能用在 windows 中。

访问文件系统


listdir() 函数列出当前目录的内容

Python 模块 OS

walk() 函数递归(recursively)访问当前目录的内容和子目录。生成一个元组(tuple),包含三个元素:路径名称,当前目录的子目录和文件列表。

Python 模块 OS

输出:

Python 模块 OS

scandir() 函数能比 listdir() 函数返回更多的信息,它返回的是一个 DirEntry 对象序列,DirEntry 对象可以访问到文件的更多元信息。

Python 模块 OS

输出:

Python 模块 OS

管理文件系统的权限


访问文件的详情,使用 stat() 或者 lstat()(查询软连接 symbolic link) 函数。

Python 模块 OS

输出:

Python 模块 OS

在 Unix-like 系统中,使用 chmod() 更改文件的权限,传入一个整数,代表要更改的文件模式,这个整数可以用 stat 模块的函数生成。

Python 模块 OS

输出:

Python 模块 OS

第一次执行时,文件默认权限是:0o644,是没有执行权限的。所以os.access(filename, os.X_OK) 返回 False。程序流程进入 if 分支,使用 chmod() 函数添加了执行权限。

第二次执行时,文件权限为:0o744。存在可执行权限,代码进入了 else 分支,删除了执行权限。

这里使用 access() 方法判断文件是否有执行权限,第二个参数值为 os.X_OK。还有其他的模式:

  • os.F_OK 测试路径是否存在
  • os.R_OK 测试路径是否可读
  • os.W_OK 测试路径是否可写
  • os.X_OK 测试路径是否可执行

stat 模块的 S_IMODE() 函数返回 chmod 格式的一个整数值。

创建和删除目录


os 模块提供了很多函数可以创建目录,创建文件,删除文件,删除目录。

Python 模块 OS

输出:

Python 模块 OS

一共有两组方法可以添加和删除目录,函数 mkdir() 创建目录,前提是所有的子目录必须存在。rmdir() 函数删除目录,只删除最后一个目录。

函数 makedirs() 和 removedirs() 创建和删除路径中所有的目录节点。

软连接 Symbolic Links


调用软连接函数,需要有底层系统支持。

Python 模块 OS

输出:

Python 模块 OS

创建软连接用 symlink() 函数,第一个参数是原始文件,第二个参数是软连接路径。

使用 lstat() 函数读取软连接的信息, readlink() 函数返回软连接指向的实际文件。

管理当前进程工作目录


当前工作目录是指进程开始运行时的所在的目录,可以通过 getcwd() 函数获取,通过 chdir() 函数改变。

Python 模块 OS

输出:

Python 模块 OS

os.curdir 和 os.pardir 分别以更便携的方式访问当前目录和父目录。

管理系统的环境变量 Environment variables


os 模块还可以设置和获取系统的环境变量,环境变量包含了一些配置信息,例如搜索路径(search paths),文件位置,debug标志位等等。

os.environ对象 和 getenv() 函数都可以获取环境变量。

以下例子演示了如果获取和删除环境变量。

Python 模块 OS

输出:

Python 模块 OS

运行外部的命令


就基础的运行外部命令的方法是使用 system() 函数,它接收一个字符串参数,这个字符串就是要在子进程中运行的命令。

Python 模块 OS

输出:

Python 模块 OS

打印了当前目录名称。返回的整数是子进程执行完毕后,返回的值。

因为执行的命令是直接发给 shell 的,可以使用 shell 的语法,例如输出一个环境变量:

Python 模块 OS

输出:

Python 模块 OS

打印环境变量 $TMPDIR,输出系统的临时目录路径。

除非明确让命令后台运行,否则 system() 函数执行完子进程后才返回。

Python 模块 OS

输出:

Python 模块 OS

程序运行中间睡眠了3秒,才打印第二个日期。

改一下 system 命令,放到后台执行

Python 模块 OS

执行结果:

Python 模块 OS

命令后面加 & 字符,把命令放到后台执行,最后 time.sleep(5) 睡眠5秒,等待子进程完成后再退出父进程。查看输出,最后才打印了第二个日期。


分享到:


相關文章: