python重写本地scop中的环境变量

2024-03-28 22:43:44 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在局部范围内重写环境变量?我知道如何用perl,但不知道python。在

在perl中:

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

输出将是:

^{pr2}$

你知道在python中怎么做吗?在

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


Tags: path方法envifbinusrlocal环境变量
2条回答

当前环境可通过标准库的操作系统模块进行映射。您可以在程序开始时设置此映射(字典)中的项。在

从操作系统模块文档:

在操作系统环境在

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

使用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

相关问题 更多 >