场景:由于pycharm
需要模拟项目在docker
容器中运行,现在需要给项目提供环境变量,并判断其类型。
我的第一反应是,给ubuntu
设置环境变量:
- 给
root
设置环境变量:
vim /etc/environment
# 写入环境变量
PARENT=8
#更新
source /etc/environment
在root用户下是可以得到结果的:
echo $PARENT
用pycharm
的terminal
并不能用,keyerror
2.给用户设置环境变量
vim ~/.bashrc
# 写入环境变量
PARENT=8
#更新
source ~/.bashrc
用pycharm
的terminal
依然不能用,keyerror
3.但是我在ubuntu的终端是可以得到环境变量的
我就奇怪了,难道是我的虚拟环境的python版本不同?于是我切换了pyenv的version
pyenv versions
pyenv global 2.7.12
然而并么有什么卵用。
4.难道是pycharm
的terminal
有问题?我又在pycharm
的terminal
中设置了一遍
依然没有卵用
5.于是乎,我去问了大佬,大佬说,pycharm
的环境变量是继承父进程的!
也就是说,子进程fock()
父进程的时候环境变量就已经分配好了,也就是说只有改变父进程的环境变量,才能使得多个子进程(这里指pycharm
的terminal
和console
)都能取到新设置的环境变量,简单点说就是,我无论怎么改变pycharm
中的terminal
的环境变量,在pycharm
的console
里都不会有结果,因为这是pycharm
的两个子进程。
- 解决方法:
1.用bash
去启动pycharm
,确定pycharm
的父进程,这样改变bash
的环境变量就行了-
pycharm
本身有设置环境变量的设置:
-
这种方式很简单,判断其类型:
print type(os.environ['PARENT'])
结果是string
,即使输入是int
,输出也是string
。
- 设置默认的环境变量(用在没有该参数程序也能正常执行时用,防止程序报错):
a = os.environ.get('PARENTp', 333)
或 try except
捕获异常。
以上!!!
网友评论