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]#  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只努力的微服务

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

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

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

打赏作者

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

抵扣说明:

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

余额充值