Python 进阶语法:os

3.1.1 文件和目录操作
  • os.getcwd(): 获取当前工作目录的路径。
python 复制代码
import os

# 获取当前工作目录
current_directory = os.getcwd()
print("当前工作目录是:", current_directory)
  • os.chdir(path): 改变当前工作目录到指定的路径。
python 复制代码
import os

# 改变当前工作目录
os.chdir('G:/WYPYTHON/PY-AGIN/1.Python基础入门/15.文件操作/test')

# 再次获取当前工作目录以确认改变
new_directory = os.getcwd()
print("新的工作目录是:", new_directory)
  • os.listdir(path): 列出指定目录下的所有文件和子目录名。
python 复制代码
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): 创建新目录。
python 复制代码
# 创建新目录
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): 删除空目录。
python 复制代码
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): 删除文件。
python 复制代码
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)连接多个路径名组件等。
python 复制代码
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): 获取环境变量的值。
python 复制代码
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): 设置环境变量的值。
python 复制代码
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是一个唯一的整数,用于在操作系统中标识进程。
python 复制代码
# 获取当前进程的进程ID
current_pid = os.getpid()
print(f"当前进程的PID是: {current_pid}")
  • os.kill(pid, signal): 向指定进程发送信号。
python 复制代码
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 注意事项
  1. 可移植性:os模块的函数通常是跨平台的,但某些函数可能在某些操作系统上不可用或行为不同。编写代码时,应注意检查函数在不同平台上的行为和兼容性。

  2. 避免直接使用os模块进行文件读写 :对于文件的读写操作,通常推荐使用Python内置的open()函数,而不是直接使用os模块。open()函数提供了更灵活和强大的文件操作功能。

  3. 小心处理环境变量:修改环境变量可能会影响到程序的行为和其他依赖环境变量的进程。在修改环境变量时,应确保了解其影响,并在程序结束时恢复其原始值。

  4. 谨慎使用os.system()os.system()函数会调用系统的shell来执行命令,这可能会带来安全风险,特别是当命令字符串由用户输入时。在使用os.system()时,应确保输入的命令是安全的,或者使用其他更安全的方法来执行系统命令。

  5. 避免使用from os import * :这样做会将os模块的所有内容导入到当前命名空间中,可能导致命名冲突和不可预见的行为。建议使用import os并显式地调用os模块的函数,以提高代码的可读性和可维护性。

总之,os模块提供了与操作系统交互的强大功能,但在使用时应注意跨平台兼容性、安全性以及代码的可读性和可维护性。

相关推荐
Summer不秃5 分钟前
Flutter之使用mqtt进行连接和信息传输的使用案例
前端·flutter
旭日猎鹰10 分钟前
Flutter踩坑记录(二)-- GestureDetector+Expanded点击无效果
前端·javascript·flutter
Viktor_Ye16 分钟前
高效集成易快报与金蝶应付单的方案
java·前端·数据库
hummhumm18 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
杜小满22 分钟前
周志华深度森林deep forest(deep-forest)最新可安装教程,仅需在pycharm中完成,超简单安装教程
python·随机森林·pycharm·集成学习
一二小选手23 分钟前
【Maven】IDEA创建Maven项目 Maven配置
java·maven
J老熊28 分钟前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
猿java33 分钟前
什么是 Hystrix?它的工作原理是什么?
java·微服务·面试
AuroraI'ncoding34 分钟前
时间请求参数、响应
java·后端·spring
乐闻x1 小时前
Vue.js 性能优化指南:掌握 keep-alive 的使用技巧
前端·vue.js·性能优化