Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python持久地更改环境变量_Python_Python 3.x - Fatal编程技术网

使用Python持久地更改环境变量

使用Python持久地更改环境变量,python,python-3.x,Python,Python 3.x,是否可以使用Python3.5在Windows和Linux中创建和更新环境变量,以便它们得到持久化 现在我用这个: import os os.environ["MY_VARIABLE"] = "TRUE" 然而,这似乎并没有持久地“存储”环境变量。我在这里是为Linux说话,不确定Windows 环境变量不是这样工作的。它们是流程的一部分(这是您通过更改os.environ来修改的),它们将传播到您流程的子流程(以及它们的子流程)。它们只存在于内存中,无法直接“设置并持久化”它们 但是,有几个

是否可以使用Python3.5在Windows和Linux中创建和更新环境变量,以便它们得到持久化

现在我用这个:

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面板或类似的东西)
大多数情况下,您只需要为当前用户设置环境变量。如果您只关心shell,请将它们以以下格式附加到~/.profile:


“持久化”环境变量的标准方法是使用配置文件。编写应用程序以打开配置文件,并设置它找到的每个名称=变量对。也可以选择在包装器启动脚本中完成此步骤

如果希望“保存”变量的状态,则需要打开配置文件并修改其内容。然后,当再次读入时,应用程序将相应地设置环境

当然,您可以用其他方式存储配置。例如,在您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]更新用户/系统变量: