我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。

如果我这样做了,

os.environ["DEBUSSY"] = 1

它抱怨说1必须是一个字符串。

我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。


当前回答

环境是为代码本身(而不是子进程)冻结的,不能通过编程方式完成。

一个好的解决方案,不管是什么平台,都是将对python的调用包装在一个批处理文件中。例如:如果我在linux上,批处理文件可能看起来像这样

export "DEBUSSY"="1"
python mycode.py

其他回答

您可能需要考虑代码健壮性的其他方面;

当您将整数值变量存储为环境变量时,请尝试

os.environ['DEBUSSY'] = str(myintvariable)

然后对于检索,考虑到要避免错误,就应该尝试

os.environ.get('DEBUSSY', 'Not Set')

可能将'-1'替换为'未设置'

所以,把这些放在一起

myintvariable = 1
os.environ['DEBUSSY'] = str(myintvariable)
strauss = int(os.environ.get('STRAUSS', '-1'))
# NB KeyError <=> strauss = os.environ['STRAUSS']
debussy = int(os.environ.get('DEBUSSY', '-1'))

print "%s %u, %s %u" % ('Strauss', strauss, 'Debussy', debussy)

环境是为代码本身(而不是子进程)冻结的,不能通过编程方式完成。

一个好的解决方案,不管是什么平台,都是将对python的调用包装在一个批处理文件中。例如:如果我在linux上,批处理文件可能看起来像这样

export "DEBUSSY"="1"
python mycode.py

你应该把字符串值赋给环境变量。

操作系统。environ["DEBUSSY"] = "1"

如果您想读取或打印环境变量,请使用

打印os.environ(“德彪西”)

此更改仅对分配该值的当前进程有效,不会永久更改该值。子进程将自动继承父进程的环境。

下面这些呢?

os.environ["DEBUSSY"] = '1'
debussy = int(os.environ.get('DEBUSSY'))
print(type(debussy))

<类“int”>

当您使用环境变量(添加/修改/删除变量)时,一个好的实践是在函数完成时恢复以前的状态。

您可能需要类似于这个问题中描述的modified_environ上下文管理器之类的东西来恢复环境变量。

经典的用法:

with modified_environ(DEBUSSY="1"):
    call_my_function()