我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。
如果我这样做了,
os.environ["DEBUSSY"] = 1
它抱怨说1必须是一个字符串。
我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。
我需要在Python脚本中设置一些环境变量,我希望从Python调用的所有其他脚本都能看到环境变量的设置。
如果我这样做了,
os.environ["DEBUSSY"] = 1
它抱怨说1必须是一个字符串。
我还想知道如何读取Python中的环境变量(在脚本的后一部分),一旦我设置它。
当前回答
在使用此方法之前,请浏览评论部分
我一直在尝试添加环境变量。我的目标是将一些用户信息存储到系统变量中,这样我就可以在未来的解决方案中使用这些变量,作为配置文件的替代品。 然而,下面代码中描述的方法对我没有任何帮助。
import os
os.environ["variable_1"] = "value_1"
os.environ["variable_2"] = "value_2"
# To Verify above code
os.environ.get("variable_1")
os.environ.get("variable_2")
这个简单的代码块工作得很好,但是,这些变量存在于各自的进程中,这样你就不会在windows系统设置的环境变量选项卡中找到它们。以上大部分代码都没有达到我的目的。这里讨论的问题是:变量保存问题
os.environ.putenv(key, value)
又一次失败的尝试。因此,最后,我通过模仿包装在os包的系统类中的windows shell命令,成功地在窗口环境寄存器中保存变量。下面的代码描述了这个成功的尝试。
os.system("SETX {0} {1} /M".format(key, value))
我希望这对你们中的一些人有所帮助。
其他回答
如果你纠结于Flask和unittest,请记住,如果你在任何方法之外设置了一个变量,当你导入应用程序时,这个变量会被读取。可能看起来微不足道,但可以省去一些麻烦。
例如,如果进入你的Flask单元测试你:
导入应用 在setUp方法中设置环境变量。 使用app.test_client()来测试应用程序
进入第二步的变量到第三步时将不会看到,因为在执行第一步时已经读取了该变量。
如果我做os。environ["DEBUSSY"] = 1,它 抱怨说1必须是 字符串。
然后做
os.environ["DEBUSSY"] = "1"
我还想知道如何阅读 python中的环境变量(在 脚本的后面部分)一旦我设置 它。
只需使用os。environ["德彪西"],如在
some_value = os.environ["DEBUSSY"]
那么os呢?environ["DEBUSSY"] = '1'?环境变量总是字符串。
在使用此方法之前,请浏览评论部分
我一直在尝试添加环境变量。我的目标是将一些用户信息存储到系统变量中,这样我就可以在未来的解决方案中使用这些变量,作为配置文件的替代品。 然而,下面代码中描述的方法对我没有任何帮助。
import os
os.environ["variable_1"] = "value_1"
os.environ["variable_2"] = "value_2"
# To Verify above code
os.environ.get("variable_1")
os.environ.get("variable_2")
这个简单的代码块工作得很好,但是,这些变量存在于各自的进程中,这样你就不会在windows系统设置的环境变量选项卡中找到它们。以上大部分代码都没有达到我的目的。这里讨论的问题是:变量保存问题
os.environ.putenv(key, value)
又一次失败的尝试。因此,最后,我通过模仿包装在os包的系统类中的windows shell命令,成功地在窗口环境寄存器中保存变量。下面的代码描述了这个成功的尝试。
os.system("SETX {0} {1} /M".format(key, value))
我希望这对你们中的一些人有所帮助。
我写了这个小的上下文管理器,它只在缩进块的持续时间内设置变量:
import os
from contextlib import contextmanager
@contextmanager
def extended_env(new_env_vars):
old_env = os.environ.copy()
os.environ.update(new_env_vars)
yield
os.environ.clear()
os.environ.update(old_env)
示例用法(Windows为%,Linux为$):
import subprocess
subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)
with extended_env({"ENVTEST": "17"}):
subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)
subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)