os
模块是 Python 标准库中的一个重要模块,它提供了与操作系统交互的功能。除了
os.path
之外,
os
模块还包含了许多其他有用的函数和子模块。下面是一些常见的
os
模块功能和相关方法:
os 模块常用功能
-
进程管理
os.system(command)
:执行一个 shell 命令,并等待命令完成。os.exec*()
:替换当前进程的图像。os.spawn*()
:创建新的进程。os.fork()
:在 UNIX 系统上创建一个新的进程。os.wait()
:等待子进程完成。os.popen()
:创建一个管道,通过子进程运行一个命令,并捕获其输出。
-
环境变量
os.environ
:获取当前进程的环境变量,这是一个类似于字典的对象。os.getenv(key[, default])
:获取环境变量的值,如果不存在则返回默认值。os.putenv(key, value)
:设置环境变量。os.unsetenv(key)
:删除环境变量。
-
文件操作
os.open(name, flags[, mode])
:打开一个文件,并返回一个文件描述符。os.close(fd)
:关闭一个文件描述符。os.read(fd, n)
:读取文件描述符的数据。os.write(fd, b)
:写入数据到文件描述符。os.remove(path)
:删除文件。os.rename(src, dst)
:重命名文件。os.chmod(path, mode)
:改变文件权限。os.chown(path, user, group)
:改变文件所有者和组。os.truncate(path, length)
:截断文件大小。os.sync()
:同步文件系统缓冲区。
-
目录操作
os.mkdir(path[, mode])
:创建一个目录。os.makedirs(name[, mode])
:递归地创建目录。os.rmdir(path)
:删除一个空目录。os.removedirs(path)
:递归地删除空目录。os.listdir(path)
:列出目录内容。os.chdir(path)
:改变当前工作目录。os.getcwd()
:获取当前工作目录。
-
进程状态
os.getpid()
:获取当前进程 ID。os.getppid()
:获取父进程 ID。os.getuid()
:获取当前进程的有效用户 ID。os.geteuid()
:获取当前进程的有效用户 ID。os.getgid()
:获取当前进程的有效组 ID。os.getegid()
:获取当前进程的有效组 ID。os.getlogin()
:获取登录用户名。os.getgroups()
:获取当前进程的附加组 ID 列表。
-
信号处理
os.kill(pid, sig)
:向一个进程发送信号。os.killpg(pgrp, sig)
:向一组进程发送信号。os.signal(sig, handler)
:设置信号处理程序。os.strerror(errnum)
:将错误号转换为错误信息。
-
其他
os.urandom(n)
:生成 n 字节的随机数据,适合加密使用。os.name
:返回操作系统的名字(‘nt’, ‘posix’, ‘os2’, ‘ce’, ‘java’)。os.uname()
:返回一个关于当前操作系统的信息元组。
这些功能提供了对底层操作系统的一些直接控制能力,可以让你编写出能够与操作系统交互的脚本和程序。
mkdir和makedir的区别
os.mkdir()
只能创建单层目录
os.makedirs()
可以创建多级目录结构,即递归创建目录。
os.mkdir(path[, mode])
这个函数用于创建一个单一的目录。如果目录路径中包含任何中间层级的目录,并且这些中间目录不存在,那么 os.mkdir()
将会抛出一个 FileNotFoundError
异常。
示例:
import os
# 创建名为 "my_directory" 的目录
os.mkdir("my_directory")
os.makedirs(name[, mode])
这个函数可以创建一个目录以及所有中间层级的目录。如果路径中的中间目录不存在,os.makedirs()
会自动创建它们。这使得你可以一次指定一个完整的目录路径,而不用担心路径中的中间目录是否已经存在。
示例:
import os
# 创建名为 "parent/child" 的目录结构
os.makedirs("parent/child")
# 如果 "parent" 目录不存在,它也会被创建
递归创建
递归创建的意思是,在创建目标目录时,如果路径中有任何中间层级的目录不存在,这些中间目录也会被创建。例如,假设你需要创建一个路径 a/b/c
的目录,但 a
和 b
都不存在。使用 os.makedirs()
可以一次性创建 a
、a/b
和 a/b/c
这三个目录。
示例:
import os
# 创建名为 "a/b/c" 的目录结构
os.makedirs("a/b/c")
# 此时 "a", "a/b", 和 "a/b/c" 都会被创建
注意事项
-
如果使用
os.makedirs()
并且某些中间目录已存在,不会有任何问题。但是,如果目标目录已经存在,将会抛出一个异常。你可以通过传递exist_ok=True
参数来避免这个异常,这样即使目标目录已存在也不会抛出异常。示例:
os.makedirs("a/b/c", exist_ok=True)
-
如果你只需要创建单个目录,使用
os.mkdir()
更简单也更高效。 -
如果需要创建多级目录结构,使用
os.makedirs()
更方便。