使用os
模块我可以获取环境变量的值。例如:
os.environ['HOME']
但是,我无法设置环境变量:
os.environ['BLA'] = "FOO"
它在程序的当前会话中工作但是当我的python程序完成时,我没有看到它改变(或设置)环境变量的值。有没有办法从Python做到这一点?
答案 0 :(得分:10)
如果您想要的是让您的环境变量在会话中保持不变,那么您可以
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"
在程序文件启动中的*.bat
答案 1 :(得分:0)
我不确定。您可以返回变量并以此方式设置它。要做到这一点打印它。
(python program)
...
print foo
(bash)的
set -- $(python test.py)
foo=$1
答案 2 :(得分:0)
如果您想这样做并将它们永久设置为用户帐户,您可以使用 setx 但如果您想要全局,您可以使用 setx /M 但对于您可能需要提升,(我以 Windows 为例,(对于 linux,您可以使用 export )
import 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()
运行后,您可以转到环境并查看它们是如何添加到我的用户环境中的
答案 3 :(得分:0)
@rantanplan 的回答是正确的。
但是,对于 Unix,如果您希望设置多个环境变量,我建议您在 \n
行的末尾添加一个 outfile
,如下所示:< /p>
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")
这将防止在环境变量值的末尾附加“export”字样。
答案 4 :(得分:0)
你可以使用 py-setenv 来完成这项工作。它将访问 Windows 注册表并为您进行更改,通过 python -m pip install py-setenv