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

相关推荐
雷神乐乐15 分钟前
File.separator与File.separatorChar的区别
java·路径分隔符
小刘|19 分钟前
《Java 实现希尔排序:原理剖析与代码详解》
java·算法·排序算法
南宫理的日知录22 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
coberup31 分钟前
django Forbidden (403)错误解决方法
python·django·403错误
逊嘘38 分钟前
【Java语言】抽象类与接口
java·开发语言·jvm
morris1311 小时前
【SpringBoot】Xss的常见攻击方式与防御手段
java·spring boot·xss·csp
我要洋人死1 小时前
导航栏及下拉菜单的实现
前端·css·css3
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
科技探秘人1 小时前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人1 小时前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome