有关环境变量

news2024/12/23 2:26:13

什么是环境变量

用户变量仅对当前用户有效,系统变量对整个系统有效
环境变量就是一个字符串,为了方便修改给隔开了(图形化界面)

环境变量可以用来配置路径,也可以用来配置其他,比如图中的 NUMBER_OF_PROCESSORS,指明了系统中处理器核心是12个。
!!!环境变量不仅只有路径,还可以提供其它信息请添加图片描述

怎么产生的

一部分是由程序、系统创建、修改 的,
一部分是由人手工创建的。

程序可以通过操作系统编程接口 增加、读取、删除、修改 环境变量配置。

人也可以通过命令或者操作界面 增加、查看、删除、修改 环境变量配置。

有什么用

环境变量本身只是一些配置信息。
主要是为应用程序提供信息, 程序可以根据这些信息,决定它们的行为
因为某些程序会读取一些环境变量的值,根据这些值决定程序的处理。

举个例子,上文中的 NUMBER_OF_PROCESSORS,是操作系统程序创建的,目的就是提供信息给 系统中所有的程序, 告诉他们当前系统所在计算机的CPU核心是4个。

那么如果有一个程序需要给客户显示系统中有多少个CPU,就可以读取这个数据,显示在界面上。

更常见的,就是指明一些程序文件或者数据文件所在的目录。比如 path、ANDROID_HOME 。

TMP 临时目录 有些程序会有一些临时文件,就可以通过环境变量获取TMP临时目录的路径,放进去

从上面的描述,可以思考出这样一个结论:

到底哪些程序 会 受哪些环境变量的影响, 是由程序本身决定的(环境变量再全,程序用不着,那环境变量也不会影响到程序)。

程序的代码 到底会 读取哪些环境变量,根据这些值做出什么行为,完全是程序开发者设计决定的。

path环境变量

命令行解释器(运行在命令行窗口中的)/ shell程序 / 解释执行我们从 命令行窗口(术语是伪终端模拟器)输入命令的程序。

当我们在命令行窗口敲入如下一行指令的时候

python.exe hyhy.py

shell程序会接收到这行命令, 它会以空格作为分隔符,把指令分割为n个部分,第一个部分就是要执行的程序,后面的都是这个程序的参数。

那么第一个问题就是, 到哪里找这个程序 python.exe 呢?

这就是根据环境变量 path 的值决定的。

它会依次到环境变量 path 里面指定的目录下面, 一个个的找。

先在哪个目录下面找到了python.exe,就执行哪个目录下面的 python.exe

看到这个例子,有些朋友可能又有误解了。

认为只要是配置目录的,都像 path 那样,可以配置好几个目录给程序依次查找。

不是的!!

还是那句话,怎么使用 环境变量 要看 各个程序本身的设计。

比如 环境变量 ANDROID_HOME, 就是只能包含一个目录的。
请添加图片描述

修改环境变量配置

如果要使修改生效,必须重启cmd程序。
程序重启后,系统配置里面的环境变量就会生效。
加上环境变量,点击两个确定(把有关环境变量的两个窗口关掉),然后重启CMD/(或是别的程序)
因为,程序启动后,都会copy一份自己的环境变量,在程序运行期间修改的环境变量不会对已经启动的cmd或其它程序起作用。

补充:查看环境变量: echo %path%
进入到D盘:d:

环境变量的继承

其实,每个程序启动后(运行的程序叫做进程),就会自己拷贝 一份 父进程 环境变量表,作为该 进程 的环境变量表。

父进程 通俗的说 就是 启动了这个程序的 程序

我们是在 Pycharm 里面运行 Python 程序, Pycharm 就是 Python 程序的父进程。

如果我们在 命令行cmd 中运行 Python 程序, 命令行cmd 就是 Python 程序的父进程。

那怎么解决这个问题呢?

连 Pycharm 也重新启动一下,这样 Pycharm 的 环境变量也更新了,它的子进程当然也会使用更新后的环境变量 就可以了。

那 pycharm 和 cmd 的父进程又是谁呢? 是 Windows 桌面管理器 explorer 。

explorer启动时,会从注册表中读取 环境变量配置作为自己进程的环境变量。

后续用户启动的程序 大都是 直接 或者 间接的从 explorer继承的环境变量,当然也就使用了配置的环境变量。

前面的例子,我们重启 cmd窗口,可以有效的重新加载系统配置的环境变量,是因为 cmd窗口的父进程是 explorer。

explorer每次启动新的进程,会重新读取配置环境变量, 作为子进程的环境变量。所以重启cmd就有效了。

但是 cmd 或者 pycharm 启动子进程, 并不会 重新读取 配置环境变量,而是把自己的环境变量作为 子进程的环境变量。 当然,修改的配置不会生效。
【例子】

#代码文件 e1.py
import os,subprocess

def printEnv(filename):
    with open(filename,'w')as f:
        for k,v in os.environ.items():
            f.write(f'{k}:{v}\n')
            #print(f'{k}:{v}\n')
#添加环境变量            
os.environ['A1']='0077' 
#执行将环境变量写入本地文件的函数
printEnv('e1.txt')    

#运行另e2.py文件
subprocess.Popen(
    [r'E:\1.Tool\0.Miniconda3\python.exe',r'D:\0.自主学习\Python基础\乱七八糟的知识点\4、环境变量\e2.py'],
    shell=False
)
# 代码文件 e2.py
import os

def printEnv(filename):
    with open(filename,'w') as f:
        for k, v in os.environ.items():
            f.write(f'{k}:{v}\n')
            print(f'{k}:{v}\n')

os.environ['A2'] = '00772'
printEnv('e2.txt')

运行 e1.py 后, e1.py的代码会启动 e2.py。

所以程序运行时, e1.py 就是 e2.py 的父进程。

上面的程序运行后,可以发现 e2.py记录的 环境变量 是在 e1.py的基础上多一个 A2=白月黑羽2 。

可以证明:环境变量从父进程继承而来。

我的理解是:e1添加了一个环境变量给父进程(添加进了VSCode但是没有放到注册表里),之后调用e2,由于e2的环境变量是继承于(copy)父进程的,且e1是添加了环境变量之后才启动的e2,所以e2启动时会从父进程copy一份环境变量,所以print e2的env会有e1添加进去的环境变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1182083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医院陪诊小程序源码 医院陪诊陪护系统源码

医院陪诊小程序源码 医院陪诊陪护系统源码 陪诊系统小程序:提高陪诊效率,改善医疗服务体验 近年来,随着互联网技术的不断发展,我们的生活中出现了越来越多的智能设备和智能应用,这些智能应用不仅极大方便了我们的生活…

数据仓库工具箱-零售业务

文章目录 一、维度模型设计的4步过程1.1 第一步:选择业务过程1.2 第二步:声明粒度1.3 第三步:确定维度1.4 第四步:确定事实 二、零售业务案例研究2.1 第一步:选择业务过程2.2 第二步:声明粒度2.3 第三步&am…

AI智能客服代替IVR

什么是IVR导航? “欢迎致电XXX客服热线 XXX请按1 XX服务请按2 重听请按3 人工服务请按0 返回请按*号键” 这个导航称为语音导航IVR。传统的电话通道系统通过电话上的按钮广播语音信息来通知客户或等待客户输入内容,然后根据客户的输入进行下一步的…

webgoat-client side客户端问题

client side Bypass front-end restrictions 用户对 Web 应用程序的前端有很大程度的控制权。 它们可以更改 HTML 代码,有时也可以更改脚本。这就是为什么 需要特定输入格式的应用也应在服务器端进行验证,而不是只在前端做限制。 0x02 先提交请求&am…

技术分享 | 想做App测试就一定要了解的App结构

app 的结构包含了 APK 结构和 app 页面结构两个部分 APK结构 APK 是 Android Package 的缩写,其实就是 Android 的安装包。通过将 APK 文件直接传到 Android 模拟器或 Android 手机中执行即可安装。 APK 文件其实是 zip 格式,但后缀名被修改为 apk&am…

虚幻引擎:如何在工程里面添加插件

1.在自己的项目中安装插件 在content目录下创建一个Plugins的文件,将插件文件放进去即可 2.在软件上安装,这样所有创建的项目都会带有此插件 将插件放在自己软件的这个目录下就好了

【JavaSE】基础笔记 - 类和对象(下)

目录 1、this引用 1.1、为什么要有this引用 1.2、什么是this引用 1.3、 this引用的特性 2、 对象的构造及初始化 2.1、 如何初始化对象 2.2、构造方法 2.2.1、概念 2.2.2、特性 2.3、默认初始化 2.4、就地初始化 上篇:【JavaSE】基础笔记 - 类和对象&#…

拥抱电大新时代,助力学业攀升——广东开放大学电大搜题微信公众号助您一臂之力

随着信息时代的快速发展和教育的普及化,广东开放大学作为一所以开放教育为主要特色的学府,致力于为更多渴望进修和提升自己的学子们提供良好的学习环境和便捷的学习工具。在这个日新月异的时代,我们尽力拓宽学生学习的途径,让学子…

京东数据分析(京东销量):2023年9月京东投影机行业品牌销售排行榜

鲸参谋监测的京东平台9月份投影机市场销售数据已出炉! 根据鲸参谋电商数据分析平台的相关数据数据显示,9月份,京东平台投影机的销量为13万,环比下滑约17%,同比下滑约25%;销售额将近2.6亿,环比下…

左孩子右兄弟

左孩子右兄弟 - 蓝桥云课 (lanqiao.cn) 这个题讲解一下思路。 看图 把样例转为二叉树: 我们可以发现所谓左孩子右兄弟就是说把一个节点的所有孩子节点中选取一个作为左子节点,这个节点的剩余孩子节点依次链接在这个左孩子节点的右边,直到某…

【送书福利-第二十五期】《AI时代系列书籍》

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文…

python零基础扫盲02基础知识

02 2.1.1注释规则 2.1.2代码缩进 2.1.3编码规范 2.2.1保留字与标识符 2.2.2理解python中的变量 2.3.1数字 2.3.2字符串 2.3.3布尔类型 2.3.4数据类型转换 2.4.1使用input()函数输入 2.4.2使用print()函数输出

论文阅读:Ensemble Knowledge Transfer for Semantic Segmentation

论文地址:https://ieeexplore.ieee.org/document/8354272 项目及数据地址:https://github.com/ishann/aeroscapes 发表时间:2018年5月7日 语义分割网络通常以严格监督的方式学习,即它们在相似的数据分布上进行训练和测试。在域转…

Element 自定义指令 下拉分页,获取无限数据

原文链接https://www.cnblogs.com/DL-CODER/p/17528026.html自定义指令loadmore: Vue.directive(loadmore, {bind(el, binding) {// 获取element-ui定义好的scroll盒子const SELECTWRAP_DOM el.querySelector(.el-select-dropdown .el-select-dropdown__wrap)if (SELECTWRAP_…

87.有效的完全平方数(力扣)

目录 问题描述 代码解决以及思想 知识点 问题描述 代码解决以及思想 class Solution { public:bool isPerfectSquare(int num) {long int left 0; // 定义左边界,使用 long int 以避免整数溢出long int right num; // 定义右边界,初始…

跨境电商平台Etsy被封?那是因为你没做对这件事!

ETSY是一个在线市场和电商平台,专注于手工艺品、独特商品和创意艺术。它为卖家提供了一个平台来展示和销售自己的手工制品、艺术品、珠宝、家居用品、时尚配饰等各种创意产品。作为一个颇受中国商家青睐的平台,Etsy在账号检测方面也是不亚于亚马逊之严格…

SOLIDWORKS 2024新功能--Electrical篇

电气工程师在完成电气原理图设计的同时,还需要频繁的修改,导出各报表,使得大量时间浪费在重复性的手动工作上,即便如此,也无法保证百分百准确无误;电气设计部门和机械设计部门虽然在设计同一产品&#xff0…

【前端面试题】 HTML+CSS篇

给大家推荐一个实用面试题库 1、前端面试题库 (面试必备) 推荐:★★★★★ 地址:web前端面试题库 如何理解 HTML 语义化? 根据内容来选择合适的标签 优点: 让人更容易读懂(增加…

无人机航迹规划:狐猴优化算法LO求解无人机路径规划MATLAB(可以修改起始点,地图可自动生成)

一、狐猴优化算法 狐猴优化算法(Lemurs Optimizer,LO)由Ammar Kamal Abasi等人于2022年提出,该算法模拟狐猴的跳跃和跳舞行为,具有结构简单,思路新颖,搜索速度快等优势。狐猴优化算法&#xff…

CrossOver2023(Mac电脑运行Windows软件)

CrossOver是一款可以让你在MAC上运行Windows应用的软件,CrossOver不像Parallels或VMware的模拟器,而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏,而不需虚拟机。兼容 Mojave 的 CrossOver Mac …