python覆盖本地范围内的环境变量

时间:2015-05-11 21:49:58

标签: python perl environment-variables

如何覆盖本地范围内的环境变量?我知道如何在perl中完成它,但不知道python。

在perl:

if (1)
{
    local $ENV{PATH} = "/usr/bin:/bin:/usr/sbin:/sbin";
    print "$ENV{PATH}\n";
}
print "$ENV{PATH}\n";
输出将是:

/usr/bin:/bin:/usr/sbin:/sbin
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

知道如何在python中做同样的事情吗?

嗯,一种方法是在范围启动之前保存环境变量,并在结束时检索它。但我想知道是否有更好的方法可以做到这一点。

2 个答案:

答案 0 :(得分:1)

使用python' with语句:

from sys import argv
import os

class MyPath(object):
    def __init__(self, newpath):
        self.newpath = newpath

    def __enter__(self):
        self.path = os.environ['PATH']
        os.environ['PATH'] = self.newpath
        return self.newpath

    def __exit__(self, type, value, traceback):
        os.environ['PATH'] = self.path

if __name__ == "__main__":
    if len(argv) < 2:
        print "usage: %s path" % (argv[0],)
        exit(1)
    print os.environ['PATH']

    with MyPath(argv[1]) as newpath:
        print newpath
        print os.environ['PATH']

    print os.environ['PATH']

python path.py whatever

产生

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games whatever whatever /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

答案 1 :(得分:-2)

当前环境可通过标准库的os模块进行映射。您可以在程序开头的此映射(字典)中设置项目。

从os模块docs:

os.environ

表示字符串环境的映射对象。例如,environ ['HOME']是主目录的路径名(在某些平台上),相当于C中的getenv(“HOME”)。