3.1.1 文件和目录操作
os.getcwd()
: 获取当前工作目录的路径。
import os
# 获取当前工作目录
current_directory = os.getcwd()
print("当前工作目录是:", current_directory)
os.chdir(path)
: 改变当前工作目录到指定的路径。
import os
# 改变当前工作目录
os.chdir('G:/WYPYTHON/PY-AGIN/1.Python基础入门/15.文件操作/test')
# 再次获取当前工作目录以确认改变
new_directory = os.getcwd()
print("新的工作目录是:", new_directory)
os.listdir(path)
: 列出指定目录下的所有文件和子目录名。
import os
# 列出指定目录下的所有文件和子目录
files_and_directories = os.listdir('G:/WYPYTHON/PY-AGIN/1.Python基础入门')
print("目录下的文件和子目录:", files_and_directories)
# 返回结果是一个列表
# 目录下的文件和子目录: ['1.1.快速上手', '1.2.数据结构', '1.计算小组赛的得分.py']
os.mkdir(name)
: 创建新目录。
# 创建新目录
os.mkdir(new_directory_path)
# 检查新目录是否存在
if os.path.exists('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库/1.os模块/new_directory'):
print("新目录已创建.")
else:
print("创建目录失败.")
os.rmdir(name)
: 删除空目录。
import os
# 删除空目录
os.rmdir('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库/1.os模块/new_directory')
# 检查目录是否已被删除
if not os.path.exists('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库/1.os模块/new_directory'):
print("空目录已被删除.")
else:
print("删除目录失败.")
os.remove(path)
: 删除文件。
import os
# 删除文件
os.remove('G:/WYPYTHON\PY-AGIN/1.Python基础入门/15.文件操作/wuyan.txt')
# 检查文件是否已被删除
if not os.path.exists('G:/WYPYTHON\PY-AGIN/1.Python基础入门/15.文件操作/wuyan.txt'):
print("文件已被删除.")
else:
print("删除文件失败.")
os.path
:os模块的子模块,提供了用于处理文件路径的函数,如os.path.exists(path)
检查路径是否存在,os.path.join(path1, path2)
连接多个路径名组件等。
import os
# 检查路径是否存在
if os.path.exists('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库/1.os模块/6.删除文件.py'):
print("文件路径存在.")
else:
print("文件路径不存在.")
# 连接多个路径名组件
full_path = os.path.join('G:/WYPYTHON/PY-AGIN/1.Python基础入门/16.标准库', '1.os模块', '6.删除文件.py')
print("完整的文件路径是:", full_path)
3.1.2 环境变量
环境变量是操作系统中存储配置信息的一种方式,它们可以被运行在系统上的任何程序访问。Python的os
模块提供了访问和修改这些环境变量的接口。以下是如何使用os.environ
来读取和修改环境变量的例子:
os.environ
: 一个字典对象,表示环境变量。可以读取和修改环境变量的值。
os.environ.get(key)
: 获取环境变量的值。
import os
# 读取名为"PATH"的环境变量的值
path = os.environ.get('PATH')
print("PATH 环境变量的值:", path)
# 读取名为"HOME"的环境变量的值,如果它不存在则返回一个默认值
home = os.environ.get('HOME', 'Default Home Directory')
print("HOME 环境变量的值或默认值:", home)
os.environ.set(key, value)
: 设置环境变量的值。
import os
# 获取当前PATH环境变量的值
current_path = os.environ.get('PATH')
# 在当前PATH环境变量的值前添加一个新的路径
new_path = 'C:\\NewDirectory\\bin;' + current_path
# 设置新的PATH环境变量
os.environ['PATH'] = new_path
# 验证新的PATH环境变量
updated_path = os.environ.get('PATH')
print("更新后的PATH 环境变量的值:", updated_path)
请注意,使用os.environ['key'] = value
来设置环境变量通常只会影响当前Python进程及其子进程的环境变量。它不会改变操作系统级别的环境变量,也就是说,当Python进程结束后,这些更改不会持续存在。
此外,对于os.environ.set(key, value)
,实际上在Python的标准库中并没有这个方法。通常我们使用os.environ['key'] = value
来设置环境变量。如果你看到os.environ.set(key, value)
,它可能是某个特定环境或第三方库提供的方法,而不是Python标准库的一部分。
如果你想永久地修改操作系统的环境变量,你需要通过操作系统的特定方式来设置,这通常涉及到编辑配置文件(如Windows上的系统属性,Linux上的.bashrc
或.bash_profile
等)或使用特定的命令行工具。
3.1.3 进程管理
os.getpid()
: 获取当前进程的进程ID。os.getpid()
是一个函数,用于获取当前进程的进程ID(PID)。这个PID是一个唯一的整数,用于在操作系统中标识进程。
# 获取当前进程的进程ID
current_pid = os.getpid()
print(f"当前进程的PID是: {current_pid}")
os.kill(pid, signal)
: 向指定进程发送信号。
import os
import signal
import time
# 获取当前进程的进程ID
current_pid = os.getpid()
print(f'当前进程的PID是: {current_pid}')
# 定义一个函数,用于接收SIGTERM信号并优雅地终止
def handle_termination(signal, frame):
print("接收到SIGTERM信号,开始退出...")
# 可以在这里执行清理工作,如关闭文件、断开数据库连接等
exit(0)
# 注册信号处理函数
signal.signal(signal.SIGTERM, handle_termination)
# 等待一段时间,以便观察进程
time.sleep(5)
# 现在,我们假设另一个进程或脚本想要终止当前进程
# 我们可以使用os.kill来发送SIGTERM信号
os.kill(current_pid, signal.SIGTERM)
在上面的例子中,我们首先获取了当前进程的PID,并打印出来。然后,我们定义了一个处理函数handle_termination
,它将在接收到SIGTERM
信号时被调用。我们使用signal.signal()
函数注册了这个处理函数,以便在接收到SIGTERM
信号时能够优雅地终止进程。
接下来,我们让进程休眠5秒钟,以便有足够的时间观察其行为。最后,我们使用os.kill()
函数向当前进程发送了一个SIGTERM
信号。由于我们已经注册了信号处理函数,因此当信号到达时,handle_termination
函数将被调用,并打印出一条消息,然后进程将退出。
请注意,在实际应用中,通常不会在同一脚本中使用os.kill()
来杀死自己,因为这样做没有太大的意义。上面的例子仅用于演示如何使用os.kill()
函数。在实际应用中,你可能会使用os.kill()
来发送信号给其他进程,例如,你可能想要终止一个由你的程序启动的子进程。
3.1.4 执行系统命令
os.system(command)
: 执行系统命令并返回命令的退出状态。
os.system()
函数用于执行传递给它的字符串参数作为系统命令,并返回命令的退出状态。退出状态是一个整数,通常,如果命令成功执行,则返回 0,否则返回非零值。
os.execv(path, args)
: 执行新的程序,替换当前进程。
os.execv()
函数用于执行一个新的程序,它会替换当前进程的映像。这意味着调用 os.execv()
后,当前进程将不再执行 Python 代码,而是开始执行新程序。os.execv()
需要两个参数:新程序的路径和一个参数列表(以列表形式提供)。
3.1.5 注意事项
-
可移植性:os模块的函数通常是跨平台的,但某些函数可能在某些操作系统上不可用或行为不同。编写代码时,应注意检查函数在不同平台上的行为和兼容性。
-
避免直接使用os模块进行文件读写:对于文件的读写操作,通常推荐使用Python内置的
open()
函数,而不是直接使用os模块。open()
函数提供了更灵活和强大的文件操作功能。 -
小心处理环境变量:修改环境变量可能会影响到程序的行为和其他依赖环境变量的进程。在修改环境变量时,应确保了解其影响,并在程序结束时恢复其原始值。
-
谨慎使用
os.system()
:os.system()
函数会调用系统的shell来执行命令,这可能会带来安全风险,特别是当命令字符串由用户输入时。在使用os.system()
时,应确保输入的命令是安全的,或者使用其他更安全的方法来执行系统命令。 -
避免使用
from os import *
:这样做会将os模块的所有内容导入到当前命名空间中,可能导致命名冲突和不可预见的行为。建议使用import os
并显式地调用os模块的函数,以提高代码的可读性和可维护性。
总之,os模块提供了与操作系统交互的强大功能,但在使用时应注意跨平台兼容性、安全性以及代码的可读性和可维护性。