使用Python持久地更改环境变量
是否可以使用Python3.5在Windows和Linux中创建和更新环境变量,以便它们得到持久化 现在我用这个:使用Python持久地更改环境变量,python,python-3.x,Python,Python 3.x,是否可以使用Python3.5在Windows和Linux中创建和更新环境变量,以便它们得到持久化 现在我用这个: import os os.environ["MY_VARIABLE"] = "TRUE" 然而,这似乎并没有持久地“存储”环境变量。我在这里是为Linux说话,不确定Windows 环境变量不是这样工作的。它们是流程的一部分(这是您通过更改os.environ来修改的),它们将传播到您流程的子流程(以及它们的子流程)。它们只存在于内存中,无法直接“设置并持久化”它们 但是,有几个
import os
os.environ["MY_VARIABLE"] = "TRUE"
然而,这似乎并没有持久地“存储”环境变量。我在这里是为Linux说话,不确定Windows 环境变量不是这样工作的。它们是流程的一部分(这是您通过更改os.environ来修改的),它们将传播到您流程的子流程(以及它们的子流程)。它们只存在于内存中,无法直接“设置并持久化”它们 但是,有几个配置文件允许您在更细粒度的基础上设置环境。这些由各种进程读取,可以是系统范围的、特定于用户的、特定于shell的、特定类型的进程等 其中包括:
- /etc/系统范围变量的环境
- /etc/Shell(及其子对象)的配置文件
- /etc中的其他几个特定于shell的文件
- 用户主目录中的各种点文件,如.profile、.bashrc、.bash_profile、.tcshrc等。阅读shell的文档
- 我相信还有各种方法可以配置从GUI启动的环境变量(例如,从gnome面板或类似的东西)
“持久化”环境变量的标准方法是使用配置文件。编写应用程序以打开配置文件,并设置它找到的每个名称=变量对。也可以选择在包装器启动脚本中完成此步骤 如果希望“保存”变量的状态,则需要打开配置文件并修改其内容。然后,当再次读入时,应用程序将相应地设置环境 当然,您可以用其他方式存储配置。例如,在您pickle/shelve的配置设置类中。然后在程序启动时,读入pickle类并设置环境。需要了解的重要一点是,当进程退出其环境时,不会保存它。环境作为分叉的有意副产品从父进程继承 配置文件可能如下所示:
NAME=VALUE
NAME2=VALUE2
...
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]
或者,您的配置类可能如下所示:
NAME=VALUE
NAME2=VALUE2
...
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]
在我们的应用程序中的其他地方
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
代码没有经过测试,但我认为您得到了jist。环境变量是特定于每个流程的;您没有将它们存储到某种持久的外部“环境”中。如果你想存储数据,考虑使用一个文件。只是找到这个问题:还有一个:你可以破解它:你可以<代码> Exc> <代码>一个BASH shell,它将用一个继承新环境变量的BASH进程来覆盖你的Python进程。但是,这不会继承任何特定于bash的东西,例如别名,因为这些东西不能从父级继承到子级(Python进程从一开始就不会得到它们)。在Windows上,您可以尝试使用[py_setenv][1]模块,该模块将通过注册表[1]更新用户/系统变量: