【问题标题】:How to read environment variables from specific file with python 2.7如何使用 python 2.7 从特定文件中读取环境变量
【发布时间】:2018-08-30 10:06:22
【问题描述】:

为了声明一些环境变量,然后使用它们调用一些 python 脚本,我创建了一个 myfile.sh 文件,该文件由 bash myfile.sh 运行。 但是,我有很多脚本应该读取这些环境变量,但无法为每个脚本创建一个 myfile.sh!

所以我的想法是创建一个环境变量文件并通过我的每个 python 脚本访问它。

所以我的问题是,如何使用 python 2.7 访问这样的文件?

一个最相关的问题如下: os.environ 从哪里读取环境变量?

需要注意的是,我无法安装额外的库,例如 dotenv。因此,如果可能,解决方案应该基于标准库。

任何帮助将不胜感激!

【问题讨论】:

  • 环境变量由环境定义。 Python 不会从任何特定文件中读取它们,而是从环境 中读取它们。这是由执行文件的任何内容设置的。例如。 export Foo="bar"; python baz.py.
  • 到目前为止你有什么尝试?
  • 对于一个脚本,我可以创建一个 myfile.sh 文件来声明我的环境变量并调用特定的脚本。然后使用 bash myfile.sh 从命令行执行此操作但我不知道如何继续因为我有很多 python 脚本,无法为每个脚本创建一个 .sh 文件。这就是为什么我考虑让我的每个脚本都读取一个环境变量文件

标签: python environment-variables


【解决方案1】:

我必须创建一个应该由我的脚本访问的新环境变量文件。

这不是它的工作原理。您需要在调用脚本之前从文件中设置环境变量:

myenv.sh

export DB_USER="foo"
export DB_PWD="bar"
export DB_NAME="mydb"
# etc

myscript.py

import os

DB_USER = os.getenv("DB_USER")
DB_PWD = os.getenv("DB_PWD")
DB_NAME = os.getenv("DB_NAME")

# etc

然后

$ source /path/to/myenv.sh
$ python /path/to/myscript.py

大多数情况下,您会希望将以上两行代码封装在一个 shell 脚本中,以使您的系统管理员的工作更轻松。

编辑:如果您希望这些环境变量“自动”设置,您始终可以从 .bashrc 或类似的地方获取它们 - 但这是一个系统管理员问题,而不是编程问题。

现在的问题是:你真的需要在这里使用环境变量吗?您也可以使用 python 设置文件 - 一个仅定义这些变量的普通 Python 模块,即:

我的设置.py

DB_USER = "foo"
DB_PWD = "bar"
# etc

并确保包含此脚本的目录的路径位于您的 $PYTHONPATH 中。然后你的脚本只需要导入它(就像它们导入任何其他模块一样),你就完成了。

锦上添花:您甚至可以混合使用这两种解决方案,方法是让您的设置模块查找环境变量并提供默认值,即:

我的设置.py

import os
DB_USER = os.getenv("DB_USER", "foo")
DB_PWD = os.getenv("DB_PWD", "bar")
# etc

【讨论】:

  • 好的,这与我一直在做的很接近。但是这个 myenv.sh 文件需要保存在哪里才能用 os.getenv 读取变量?另外,我有很多文件,所以我不想为每个文件创建一个 shell 脚本,如果可能的话..
  • 没有“应该保存 myenv.sh 以便使用 os.getenv() 读取变量”的特殊位置,需要的是您明确来源这个文件 - 一种或另一种方式 - 在你运行你的 python 脚本之前。对于每个用户的环境变量,这通常在 .profile 或 .bashrc 中完成,但您提到(在您的问题的先前版本中)您无法使用这些文件。
  • 非常感谢您的宝贵时间(和赞成票),虽然这不是我想要的(config.py 文件是一个选项,或者是带有选项的 xml 或 json 文件,但有人问我在 bash 上使用它,无需修改 ~/.profile 或 ~/.bashrc .... 无论如何,非常感谢
  • 嗯,唯一的解决方案是在执行脚本(手动或使用包装器)之前明确地获取您的 myenv.sh。
  • 请注意,您可以为所有 python 脚本使用一个包装 bash 脚本 - 您所要做的就是将 python 脚本路径作为参数传递给 bash 脚本,即$ mywrapper.sh path/to/myscript.py
【解决方案2】:

从命令行显示环境

  • linux:export
  • 窗口:set

设置环境变量

  • linux:export foo=bar
  • 窗口:set foo=bar

打印环境变量:

  • linux:echo $foo
  • 窗口:echo %foo%

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 2015-12-12
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2013-03-23
    • 1970-01-01
    相关资源
    最近更新 更多