当前位置: 首页 > news >正文

【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析

在Windows系统中,你可以通过修改环境变量 PATH 来使得 ffmpeg.exe 可在任意路径下直接使用。要通过Python修改环境变量并立即生效,如图:
在这里插入图片描述

你可以使用以下代码:

import os
import winreg as reg# ffmpeg.exe的路径
ffmpeg_path = r"D:\ffmpeg-2023-s\bin"# 获取当前的环境变量PATH
current_path = os.environ.get('PATH', '')# 如果ffmpeg的路径不在当前PATH中,就添加进去
if ffmpeg_path not in current_path:new_path = current_path + ";" + ffmpeg_pathos.environ['PATH'] = new_path# 将新的路径添加到系统环境变量中(为了永久生效)try:key = reg.OpenKey(reg.HKEY_LOCAL_MACHINE, r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment", 0, reg.KEY_WRITE)reg.SetValueEx(key, "Path", 0, reg.REG_EXPAND_SZ, new_path)reg.CloseKey(key)print("ffmpeg路径已成功添加到系统环境变量Path中。")except Exception as e:print(f"修改系统环境变量时出错: {e}")
else:print("ffmpeg路径已在环境变量中,无需修改。")

以上代码通过 Python 实现了将 ffmpeg 的安装路径添加到 Windows 系统的 PATH 环境变量中,并确保修改永久生效。

修改当前进程的环境变量:首先获取当前的 PATH 环境变量,判断 ffmpeg 路径是否已存在。如果不存在,则将其添加到 PATH 环境变量中,并通过 os.environ 更新当前进程的环境变量。

通过注册表修改系统环境变量:为了使修改永久生效,代码通过 winreg 模块操作 Windows 注册表,修改系统级的 PATH 环境变量。这样,ffmpeg 路径会对所有用户和进程生效。

临时与永久修改:使用 os.environ 修改仅对当前 Python 进程有效,而通过 winreg 修改则会永久生效,确保即使重启系统,ffmpeg 路径依旧保持在 PATH 环境变量中。

注意

os.environ:用来获取和设置当前Python进程的环境变量。
winreg:通过这个模块可以修改Windows注册表,从而永久修改系统的环境变量。
HKEY_LOCAL_MACHINE:这是Windows注册表中存储系统级别设置的位置,路径修改会影响到所有用户。
reg.SetValueEx:用来将新的路径添加到 Path 环境变量。

运行此脚本时需要管理员权限,因为修改系统环境变量涉及到注册表操作。
如果只想临时修改环境变量,可以直接通过 os.environ 来修改,改动只在当前进程中有效。
运行此脚本后,你应该能够在命令行中直接使用 ffmpeg 命令了。如果希望立即生效,可以重新启动你的命令提示符或者相关的终端窗口。

运行结果:

在这里插入图片描述
系统环境:
在这里插入图片描述

http://www.lryc.cn/news/525944.html

相关文章:

  • 检测到联想鼠标自动调出运行窗口,鼠标自己作为键盘操作
  • web UI自动化测试笔记
  • 计算机网络 (60)蜂窝移动通信网
  • 计算机网络三张表(ARP表、MAC表、路由表)总结
  • DRF开发避坑指南01
  • 批量提取多个 Excel 文件内指定单元格的数据
  • #HarmonyOS篇:build-profile.json5里面配置productsoh-package.json5里面dependencies依赖引入
  • Spring集成Redis|通用Redis工具类
  • Vue中设置报错页面和“Uncaught runtime errors”弹窗关闭
  • 【力扣】219. 存在重复元素 II
  • 头歌实训作业 算法设计与分析-贪心算法(第5关:求解流水作业调度问题)
  • Hadoop•搭建完全分布式集群
  • SQL-leetcode—1141. 查询近30天活跃用户数
  • 总结与展望,龙蜥社区第 30 次运营委员会会议线上召开
  • idea对jar包内容进行反编译
  • c++----------------------多态
  • C语言 指针_野指针 指针运算
  • 【JavaEE进阶】Spring留言板实现
  • 第25篇 基于ARM A9处理器用C语言实现中断<一>
  • 面向通感一体化的非均匀感知信号设计
  • 修改docker共享内存shm-size
  • WIN11 UEFI漏洞被发现, 可以绕过安全启动机制
  • 网安加·百家讲坛 | 樊山:数据安全之威胁建模
  • jQuery阶段总结(二维表+思维导图)
  • 【LLM】RedisSearch 向量相似性搜索在 SpringBoot 中的实现
  • 如何为64位LabVIEW配置正确的驱动程序
  • Redis(5,jedis和spring)
  • Git 小白入门教程
  • Python从0到100(八十五):神经网络与迁移学习在猫狗分类中的应用
  • 代码随想录刷题day14(2)|(链表篇)02.07. 链表相交(疑点)