Python在linux设置环境变量问题

问题1:通过export ABCD=abcd方式设置环境变量,获取不到设置值

>>> import commands
>>> import os
>>> cmd = "export ABCD=abcd"
>>> env = commands.getoutput(cmd)
>>> print os.getenv("ABCD")
None
>>> 

问题2:通过os.environ[‘ABCD’] = 'abcd’方式设置环境变量,可以获取到设置值,但只在Python进程中有效,执行完毕后无法获取

>>> import os
>>> cmd = "export ABCD=abcd"
>>> os.environ['ABCD'] = 'abcd'
>>> print os.getenv("ABCD")
abcd
>>> 

退出后,查询环境变量,查不到

[root@localhost ~]# env|grep ABCD
[root@localhost ~]# 

或将其写成脚本

#!/usr/lib/python
# -*- coding: UTF-8 -*-
import os


def set_env():
    os.environ['ABCD'] = 'abcd'
    env = os.getenv("ABCD")
    print env


if __name__ == "__main__":
    set_env()

执行:

[root@localhost env]# python ./env.py;echo $ABCD
abcd

[root@localhost env]# 

设置成功了观景变量ABCD,但是还是取不到值。

问题分析:

对于环境变量的设置来说,Python直接执行export ABCD=abcd是无法设置成功的,设置方法可以通过os.environ[‘ABCD’] = 'abcd’来设置,但是由于Python运行是启动新的进程,设置的环境变量只在该进程内有效,所以env.py执行完毕后也无法再获取到设置的环境变量。

解决办法:

我们都知道直接在shell中执行export ABCD=abcdefg是可以成功设置的,也就是说在标准输出中执行该命令是可以设置为session级别的环境变量(其实也是进程级别,在shell中在启动进程就属于该shell的子进程是可以继承父进程的环境变量),所以可以通过echo $ABCD命令再次查到结果。

[root@localhost ~]# export ABCD=abcdefg
[root@localhost ~]# echo $ABCD
abcdefg
[root@localhost ~]# 

所以要通过Python脚本设置环境变量,就可以将export命令定向到标准输出,即print

#!/usr/lib/python
# -*- coding: UTF-8 -*-
import os
from pipes import quote


def set_env():
    print "export ABCD={};".format(quote("abcd"))


if __name__ == "__main__":
    set_env()


[root@localhost env]# eval $(python ./env.py);echo $ABCD
abcd
[root@localhost env]# env|grep ABCD
ABCD=abcd
[root@localhost env]#  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux上,Python中可以通过`os.environ`模块来处理环境变量。可以使用以下方法来设置、获取和删除环境变量: 1. 设置环境变量:使用`os.environ['VARIABLE_NAME'] = 'value'`的方式可以设置环境变量,其中`VARIABLE_NAME`是要设置环境变量名称,`value`是要设置的值。例如,要设置`WORKON_HOME`环境变量的值为`/path/to/workon_home`,可以使用`os.environ['WORKON_HOME'] = '/path/to/workon_home'`。 2. 获取环境变量:有两种常用的方法来获取环境变量的值。第一种方法是使用`os.environ.get('VARIABLE_NAME')`,其中`VARIABLE_NAME`是要获取的环境变量的名称。这种方法在环境变量不存在时会返回`None`,可以用于处理不存在的环境变量。第二种方法是使用`os.getenv('VARIABLE_NAME')`,这种方法在环境变量不存在时会返回空字符串。 3. 删除环境变量:可以使用`del os.environ['VARIABLE_NAME']`的方式删除环境变量,其中`VARIABLE_NAME`是要删除的环境变量的名称。例如,要删除`WORKON_HOME`环境变量,可以使用`del os.environ['WORKON_HOME']`。 请注意,使用`os.system("export VARIABLE_NAME='value'")`的方式是错误的,这种方式只是在当前shell进程中设置了一个临时变量,进程结束后变量就会失效。正确的方式是使用`os.environ['VARIABLE_NAME'] = 'value'`来设置全局环境变量。 总结:在Linux上,Python可以通过`os.environ`模块来设置、获取和删除环境变量,可以使用`os.environ['VARIABLE_NAME'] = 'value'`来设置环境变量的值,使用`os.environ.get('VARIABLE_NAME')`或`os.getenv('VARIABLE_NAME')`来获取环境变量的值,使用`del os.environ['VARIABLE_NAME']`来删除环境变量

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想敲代码的运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值