14

使用os模块我可以获得环境变量的值。例如:

os.environ['HOME']

但是,我无法设置环境变量:

os.environ['BLA'] = "FOO"

它在程序的当前会话中工作,但是当我的 python 程序完成时,我没有看到它更改(或设置)环境变量的值。有没有办法从 Python 做到这一点?

4

5 回答 5

11

如果你想要的是让你的环境变量在会话中持续存在,你可以

对于unix

做我们在bashshell 中所做的事情。将环境变量附加到~/.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"

*.batProgram Files 的 Startup 中

于 2013-07-15T15:26:00.477 回答
3

如果你想这样做并将它们永久设置到用户帐户中,你可以使用setx 但如果你想作为全局,你可以使用setx /M 但为此你可能需要提升,(我以 windows 为例,(对于 linux你可以使用导出

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()

运行后,您可以转到环境并查看它们是如何添加到我的用户环境中的

在此处输入图像描述

于 2021-01-07T20:44:49.450 回答
1

我不知道。您可以返回变量并以这种方式设置它。为此打印它。

(蟒蛇程序)

...
print foo

(重击)

set -- $(python test.py)
foo=$1
于 2013-07-15T15:20:16.747 回答
1

@rantanplan 的回答是正确的。但是,对于Unix,如果您希望设置多个环境变量,我建议您\n在行尾添加 a,outfile如下所示:

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")

这将防止在环境变量值的末尾附加“导出”字样。

于 2021-03-20T03:12:10.437 回答
0

您可以使用 py-setenv 来完成这项工作。它将访问 Windows 注册表并为您进行更改,通过安装python -m pip install py-setenv

于 2021-08-08T11:33:56.667 回答