使用 os
模块,我可以获取环境变量的值。例如:
os.environ['HOME']
然而,我无法设置环境变量:
os.environ['BLA'] = "FOO"
在当前程序会话中它可以工作,但当Python程序结束时,我没有看到它更改(或设置)环境变量的值。是否有一种从Python中进行这样操作的方法?
使用 os
模块,我可以获取环境变量的值。例如:
os.environ['HOME']
然而,我无法设置环境变量:
os.environ['BLA'] = "FOO"
在当前程序会话中它可以工作,但当Python程序结束时,我没有看到它更改(或设置)环境变量的值。是否有一种从Python中进行这样操作的方法?
如果你想让环境变量在会话之间持久化,你可以这样做:
对于 Unix
像我们在 bash
shell中所做的那样。将您的环境变量附加到 ~/.bashrc
。
import os
with open(os.path.expanduser("~/.bashrc"), "a") as outfile:
# 'a' stands for "append"
outfile.write("export MYVAR=MYVALUE")
或者针对Windows:
setx /M MYVAR "MYVALUE"
在Program Files的Startup中有一个*.bat文件
setx
命令。或者你可以使用 _winreg
Python 模块直接访问 win 注册表 http://docs.python.org/2/library/_winreg.html。 - rantanplanimport subprocess
if os.name == 'posix': # if is in linux
exp = 'export hi2="youAsWell"'
if os.name == 'nt': # if is in windows
exp = 'setx hi2 "youAsWell"'
subprocess.Popen(exp, shell=True).wait()
@rantanplan的答案是正确的。然而,对于Unix系统,如果您想要设置多个环境变量,建议在outfile
行末尾添加\n
,如下所示:
outfile.write("export MYVAR=MYVALUE\n")
import os
with open(os.path.expanduser("~/.bashrc"), "a") as outfile:
# 'a' stands for "append"
outfile.write("export MYVAR1=MYVALUE1\n")
outfile.write("export MYVAR2=MYVALUE2\n")
...
print foo
set -- $(python test.py)
foo=$1
你可以使用 py-setenv 完成这项任务。它将访问 Windows 注册表并为您进行更改,可以通过 python -m pip install py-setenv
进行安装。
from os import path
with open(path.join(path.expanduser('~'),"AppData","Roaming","Microsoft","Windows"
,"Start Menu","Programs","Startup","script.ps1"), 'w') as fp:
fp.write('[Environment]::SetEnvironmentVariable("THIS_IS_NAME", "THIS_IS_VALUE", "User") ')
正在执行的命令用于设置环境。如果有任何拼写错误,请告诉我;)