首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >环境变量中的Python环境变量

环境变量中的Python环境变量
EN

Stack Overflow用户
提问于 2014-08-07 00:05:41
回答 3查看 300关注 0票数 1

我正在尝试通过Python设置一个环境变量

代码语言:javascript
运行
复制
os.environ["myRoot"]="/home/myName"
os.environ["subDir"]="$myRoot/subDir"

我希望subDir环境变量保存/home/myname/subDir,但是它保存字符串'$myRoot/subDir'。如何获得此功能?

(更大的图片:我正在读取一个环境变量的json文件,下面的文件引用较高的变量)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-07 20:23:18

可以使用os.path.expandvars展开环境变量,如下所示:

代码语言:javascript
运行
复制
>>> import os
>>> print os.path.expandvars("My home directory is $HOME")
My home director is /home/Majaha
>>> 

以您为例,您可以这样做:

代码语言:javascript
运行
复制
os.environ["myRoot"] = "/home/myName"
os.environ["subDir"] = os.path.expandvars("$myRoot/subDir")

我认为@johntellsall的答案对于您给出的具体示例更好,但是我不怀疑您会发现这对您的json工作有用。

编辑:我现在建议使用@johntellsall的答案,因为os.path.expandvars()是为路径明确设计的,所以将它用于任意字符串可能有效,但有点麻烦。

票数 1
EN

Stack Overflow用户

发布于 2014-08-07 00:08:27

使用os.environ获取值,使用os.path正确地将斜杠放在正确的位置:

代码语言:javascript
运行
复制
os.environ["myRoot"]="/home/myName" 
os.environ["subDir"] = os.path.join(os.environ['myRoot'], "subDir")
票数 1
EN

Stack Overflow用户

发布于 2014-08-07 00:13:46

代码语言:javascript
运行
复制
def fix_text(txt,data):
    '''txt is the string to fix, data is the dictionary with the variable names/values'''
    def fixer(m): #takes a regex match 
         match = m.groups()[0] #since theres only one thats all we worry about
         #return a replacement or the variable name if its not in the dictionary
         return data.get(match,"$%s"%match) 
    return re.sub("$([a-zA-Z]+)",fixer,txt) #regular expression to match a "$" followed by 1 or more letters

with open("some.json") as f: #open the json file to read
    file_text= f.read()
data = json.loads(file_text) #load it into a json object
#try to ensure you evaluate them in the order you found them
keys = sorted(data.keys() ,key=file_text.index) 
#create a new dictionary by mapping our ordered keys above to "fixed" strings that support simple variables
data2= dict(map(lambda k:(k,fixer(data[k],data)),keys)
#sanity check
print data2

编辑以修复可能导致其无法工作的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25172242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档