如何覆盖本地范围内的环境变量?我知道如何在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中做同样的事情吗?
嗯,一种方法是在范围启动之前保存环境变量,并在结束时检索它。但我想知道是否有更好的方法可以做到这一点。
答案 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”)。