【问题标题】:python override environment variable in local scopepython覆盖本地范围内的环境变量
【发布时间】:2015-05-11 21:49:58
【问题描述】:

如何在本地范围内覆盖环境变量?我知道如何在 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 中做同样的事情吗?

嗯,一种方法是在作用域开始之前保存环境变量,并在结束时检索它。但我想知道是否有更好的方法来做到这一点。

【问题讨论】:

    标签: python perl environment-variables


    【解决方案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

    【讨论】:

    • 那么我可以在没有新课程的情况下做到这一点吗?
    • 当然,您可以手动执行您的建议:保存当前路径,更改它,恢复它。 with 语句是实现相同目的的一种简洁的 Python 方式,具有许多好处。我的解决方案是一种,也许不是唯一的。
    【解决方案2】:

    当前环境可通过标准库的 os 模块作为映射使用。您可以在程序开始时在此映射(字典)中设置项目。

    来自 os 模块文档:

    os.environ

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

    【讨论】:

    • 这个答案没有解决问题的关键“本地范围”部分。
    • 我知道 os.environ。问题是如何在本地范围内更改它。
    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多