系列文章目录
深入探索Python库之操作系统功能的接口OS库(1)
深入探索Python库之操作系统功能的接口OS库(2)
文章目录
- 系列文章目录
- 引言
- 系统信息
- 进程管理
- 结论
引言
前篇文章介绍了python库中os
库的核心用途,包括文件管理、环境变量访问、进程管理等,这一篇我们接着介绍os
库中常用的几个函数,并根据常用度和重要性进行了星级评定★,★ 越多则越重要,在日常代码中出现频率越高。
系统信息
-
os.name: ★ ★ ★
此方法返回一个字符串,表示正在运行的操作系统的名称。例如,对于UNIX系统,它通常返回'posix'
,对于Windows系统,返回'nt'
。这个功能在编写跨平台代码时非常有用,因为你可以根据操作系统的类型来调整代码的行为。示例代码:
os_name = os.name print(f"Operating system name: {os_name}")
-
os.getcwd: ★ ★ ★ ★
此方法返回当前Python脚本的工作目录的绝对路径。这非常有用,特别是当你需要获取当前脚本的位置或者基于当前目录构建相对路径时。示例代码:
current_directory = os.getcwd()print(f"Current working directory: {current_directory}")
-
os.path: 这是一个子模块,提供了一系列处理文件和目录路径的方法。
-
os.path.join: ★ ★ ★ ★ ★
此方法用于连接两个或多个路径部分,正确处理不同操作系统中的路径分隔符问题。这在构建文件路径时非常有用,确保代码的跨平台兼容性。下面的代码是连接上面的当前目录的(current_directory)示例代码:
joined_path = os.path.join(current_directory, "new_dir")print(f"Joined path: {joined_path}")
-
os.path.split: ★ ★ ★ ★ ★
此方法用于分割路径为目录和文件名。这在你需要从完整路径中分离文件名或目录名时非常方便。示例代码:
dir_name, file_name = os.path.split(joined_path)print(f"Directory: {dir_name}, File: {file_name}")
-
os.path.abspath(path): ★ ★ ★ ★ ★
返回给定路径的绝对路径。这在确定文件或目录的完整路径时非常有用,尤其是在处理相对路径时。示例代码:
absolute_path = os.path.abspath("example.txt")
-
os.path.dirname(path): ★ ★ ★ ★ ★
返回文件路径的目录名。如果你需要从完整路径中分离出目录部分,这个函数很有用。示例代码:
dir_name = os.path.dirname("/usr/bin/python3")
-
os.path.exists(path): ★ ★ ★ ★ ★
检查指定的路径是否存在。这在验证文件或目录是否存在时经常用到。示例代码:
path_exists = os.path.exists("/usr/bin/python3")
-
os.path.isfile(path): ★ ★ ★ ★ ★
检查路径是否指向一个文件。这在验证路径是否指向一个实际的文件时很有用。示例代码:
is_file = os.path.isfile("/usr/bin/python3")
-
os.path.isdir(path): ★ ★ ★ ★ ★
检查路径是否指向一个目录。这在确定一个路径是否是目录时使用。示例代码:
is_dir = os.path.isdir("/usr/bin")
-
os.path.split(path): ★ ★ ★ ★ ★
将路径分割为目录和文件名。这在需要从路径中分离出目录和文件名时使用。
示例代码:split_path = os.path.split("/usr/bin/python3")
-
os.path.splitext(path): ★ ★ ★ ★ ★
分割路径的扩展名。这在需要从文件名中分离出文件扩展名时使用。
示例代码:split_ext = os.path.splitext("/usr/bin/python3")
-
os.path.basename(path): ★ ★ ★ ★ ★
从给定的路径中提取文件名。这在从完整路径中仅获取文件名时非常方便。
示例代码:base_name = os.path.basename("/usr/bin/python3")
-
os.path.expanduser(path): ★ ★ ★
展开路径中的"~"为用户目录。这在处理用户目录路径时非常方便。
示例代码:expanded_user = os.path.expanduser("~")
-
os.path.commonpath(paths): ★ ★ ★
返回一系列路径的公共前缀。当你有多个路径并想找到它们的共同根目录时,这个函数很有帮助。
示例代码:common_path = os.path.commonpath(["/usr/bin/python3", "/usr/bin"])
-
os.path.commonprefix(list): ★ ★ ★
返回列表中所有路径的最长公共子路径。这适用于寻找多个路径的共同前缀,但不一定是有效的路径。
示例代码:common_prefix = os.path.commonprefix(["/usr/bin/python3", "/usr/bin"])
-
os.path.expandvars(path): ★ ★
展开路径中的环境变量。这在处理包含环境变量的路径时非常有用。
示例代码:expanded_vars = os.path.expandvars("$HOME")
-
os.path.getatime(path): ★ ★
返回路径的最后访问时间。这可以用来获取文件或目录上次被访问的时间。
示例代码:access_time = os.path.getatime("/usr/bin/python3")
-
os.path.getctime(path): ★ ★
返回路径的创建时间。这在获取文件或目录的创建时间时使用。
示例代码:create_time = os.path.getctime("/usr/bin/python3")
-
os.path.getmtime(path): ★ ★
返回路径的最后修改时间。这在确定文件或目录最后一次修改的时间时非常有用。
示例代码:modify_time = os.path.getmtime("/usr/bin/python3")
-
os.path.getsize(path): ★ ★
返回路径文件的大小。这用于获取文件的大小,以字节为单位。
示例代码:file_size = os.path.getsize("/usr/bin/python3")
-
os.path.isabs(path): ★ ★ ★
检查路径是否为绝对路径。这在判断一个路径是否是绝对路径时使用。
示例代码:is_absolute = os.path.isabs("/usr/bin/python3")
-
os.path.islink(path): ★ ★ ★
检查路径是否指向一个符号链接。这在识别符号链接时有用。
示例代码:is_link = os.path.islink("/usr/bin/python")
-
os.path.ismount(path): ★ ★
检查路径是否为挂载点。这在确定路径是否是文件系统挂载点时使用。
示例代码:is_mount = os.path.ismount("/")
-
os.path.normcase(path): ★ ★ ★
规范化路径的大小写。这在处理大小写敏感的文件系统时非常有用。
示例代码:norm_case = os.path.normcase("/usr/BIN/Python3")
-
os.path.normpath(path): ★ ★ ★
规范化路径,合并多余的分隔符和上级引用。这在清理和规范化路径时非常有用。
示例代码:norm_path = os.path.normpath("/usr//bin/../bin/python3")
-
os.path.realpath(path): ★ ★ ★ ★
返回路径的真实路径,解析符号链接。这在获取文件的实际路径(解析符号链接之后的路径)时使用。
示例代码:real_path = os.path.realpath("/usr/bin/python")
-
os.path.relpath(path[, start]): ★ ★ ★
从start目录到path的相对路径。这在计算从一个目录到另一个目录的相对路径时使用。
示例代码:relative_path = os.path.relpath("/usr/bin/python3", "/usr")
-
os.path.samefile(path1, path2): ★ ★
检查两个路径是否指向同一个文件。这在确定两个路径是否引用同一个文件时使用。
示例代码:# 示例代码需要两个实际存在的文件路径
-
os.path.sameopenfile(fp1, fp2): ★ ★
检查两个打开的文件对象是否指向同一个文件。这在比较文件对象时使用。
示例代码:# 示例代码需要打开的文件对象
-
os.path.samestat(stat1, stat2): ★ ★
检查两个stat对象是否指向同一个文件。这在使用文件状态对象进行比较时使用。
示例代码:# 示例代码需要stat对象
-
os.path.splitdrive(path): ★ ★
将路径分割为驱动器名和路径。这主要在Windows操作系统中使用,用于分离驱动器(如C:\)和路径。
示例代码:split_drive = os.path.splitdrive("/usr/bin/python3")
-
os.path.supports_unicode_filenames: ★
检查平台是否支持Unicode文件名。这在处理可能包含Unicode字符的文件名时有用。
示例代码:# 注意:该属性可能不在所有系统上都可用
这些
os.path
模块中的函数提供了丰富的文件路径操作功能,非常适合用于文件系统的遍历、路径的构建和处理等场景。
-
进程管理
-
os.system(command): ★ ★ ★ ★ ★
用于在子shell中运行指定的命令。它会阻塞当前Python脚本的执行,直到命令执行完成。os.system
常用于执行系统命令,如启动外部程序或脚本,执行简单的系统管理任务等。它适合于不需要与外部程序交互的场景。
示例代码:command = "echo Hello, world!" status = os.system(command) print(f"Command executed with status: {status}")
-
os.exec系列函数 (如os.execl, os.execvp): ★
用于执行一个新程序,替换当前进程。这意味着一旦exec
函数被调用,当前的Python进程将结束,由新程序取代。os.exec
系列函数通常用于需要完全替换当前进程的情况,比如在一个Python脚本中启动另一个程序,然后结束当前脚本。它适用于当不再需要当前正在运行的程序时,直接用另一个程序替换它的场景。
示例代码: 由于exec
函数会结束当前的Python进程,因此在这里无法直接展示其效果。但以下是一个典型的用法示例:# os.execl("/usr/bin/python3", "/usr/bin/python3", "some_script.py")
举例,新建一个叫x.py的文件,填入下面代码
import osprint('start............')
os.execl("/usr/bin/python3", "/usr/bin/python3", "y.py")
print('I am x.py')
再新建一个y.py文件,填入下面代码
print('I am y.py')
运行x.py文件,你会发现终端的打印只有下面两行
start............
I am y.py
也就是说,程序并未执行I am x.py这句打印。
实际上,
os.execl("/usr/bin/python3", "/usr/bin/python3", "y.py")
这个语句解释一下每个参数的意义:
-
第一个
"/usr/bin/python3"
是可执行程序的路径,也就是Python解释器的路径。 -
第二个
"/usr/bin/python3"
是传递给程序的argv[0]
,这是一个惯例,通常设置为程序的路径或名称。 -
"y.py"
是要执行的Python脚本文件的名称。
如果你的第一个参数是 "y.py"
,那么操作系统会尝试将这个脚本文件当作可执行程序来运行,这通常不会成功,除非该脚本文件具有执行权限并且以像 #!/usr/bin/env python3
这样的shebang行开头。
结论
本篇博客继续承接上篇主要讲了os
库中系统信息和进程管理操作的函数,并根据出现频次来给出星级评定,供读者参考。