是否可以使用 Python 3.5 在 Windows 和 Linux 中创建和更新环境变量以使其持久化?
目前我使用这个:
import os
os.environ["MY_VARIABLE"] = "TRUE"
Run Code Online (Sandbox Code Playgroud)
然而,这似乎不会持久地“存储”环境变量。
我在这里说的是 Linux,不确定 Windows。
环境变量不能那样工作。它们是进程的一部分(这是您通过更改 os.environ 修改的内容),并且它们将传播到您的进程的子进程(显然还有它们的子进程)。它们仅在内存中,无法直接“设置和持久化”它们。
然而,有几个配置文件允许您在更细粒度的基础上设置环境。这些由各种进程读取,并且可以是系统范围的、特定于用户的、特定于外壳的、特定于特定类型的进程等。
他们之中有一些是:
大多数情况下,您只想为当前用户设置环境变量。如果您只关心 shell,请按以下格式将它们附加到 ~/.profile 中:
NAME="VALUE"
“保留”环境变量的标准方法是使用配置文件。编写您的应用程序以打开配置文件并设置它找到的每个 NAME=VARIABLE 对。(可选)此步骤可以在包装器启动脚本中完成。
如果您希望“保存”变量的状态,则需要打开配置文件并修改其内容。然后,当再次读入时,您的应用程序将相应地设置环境。
您当然可以以其他方式存储配置。例如,在您pickle/shelve的configuration_settings类中。然后在程序启动时,您读取 pickled 类并设置环境。需要理解的重要一点是,当进程退出时,其环境不会被保存。环境是从父进程继承的,作为分叉的有意副产品。
配置文件可能如下所示:
NAME=VALUE
NAME2=VALUE2
...
Run Code Online (Sandbox Code Playgroud)
或者你的配置类可能如下所示:
class Configuration():
env_vars = {}
import os
def set(name, val):
env_vars[name] = val
os.environ[name] = val
def unset(name):
del env_vars[name]
del os.environ[name]
def init():
for name in env_vars:
os.environ[name] = env_vars[name]
Run Code Online (Sandbox Code Playgroud)
我们应用程序中的其他地方
import shelve
filename = "config.db"
d = shelve.open(filename)
# get our configuration out of shelve
config = d['configuration']
# initialize environment
config.init()
# setting an environment variable
config.set("MY_VARIABLE", "TRUE")
#unsetting
config.unset("MY_VARIABLE")
# save our configuration
d['configuration'] = config
Run Code Online (Sandbox Code Playgroud)
代码没有经过测试,但我想你已经明白了要点。
| 归档时间: |
|
| 查看次数: |
3540 次 |
| 最近记录: |