Python 3.x 如何覆盖django settings.py文件的os.environ.get()

Python 3.x 如何覆盖django settings.py文件的os.environ.get(),python-3.x,Python 3.x,我正在使用一些环境变量。我可以通过os.environ.get(“somekey”,None)获得它们。如果环境变量中的一行有一个我放在前面的标志,我想应用一些逻辑 env中的示例行: FILE_PASS=password FILE_NAME=examplefile #CHECK 在settings.py中: file_pass = os.environ.get("FILE_PASS", "") file_name = os.environ.get(&q

我正在使用一些环境变量。我可以通过
os.environ.get(“somekey”,None)
获得它们。如果环境变量中的一行有一个我放在前面的标志,我想应用一些逻辑

env中的示例行:

FILE_PASS=password
FILE_NAME=examplefile #CHECK
在settings.py中:

file_pass = os.environ.get("FILE_PASS", "")
file_name = os.environ.get("FILE_NAME","default_file")
我不想写
my_custom_env()
,因为我希望每个人都在我的逻辑后面使用os.environ.get函数

我该怎么做? 编辑:这叫猴子补丁吗? 我想我想要的是这样的东西

import os
def new_os_environ(key, default=''):
    env = os.environ
    line = env.get(key, default)
    if "#CHECK" in line:
        #do some stuff
    return line

os.environ.get = new_os
os.environ.get("FILE_NAME","heey")
这:

将不起作用,因为
#CHECK
将被视为注释,并且不会与
env.get
命令一起显示

我想您可以逐行读取该文件,但更好的方法是在env文件中添加一个新变量。大致如下:

CHECK=TRUE
然后,您可以专门检查该值是否存在,并相应地编码

check = os.environ.get("CHECK","FALSE")
if check == "TRUE":
   # Do your stuff herre

如果要直接使用布尔值,请使用1和零。我更喜欢文本字符串TRUE和FALSE,因为我认为它们更突出,更清楚地表明你在做什么,但这只是个人偏好。

恐怕我不太理解这个问题。“如果环境变量中的一行有一个我放在前面的标志,我想应用一些逻辑。”-这意味着什么,你能更具体地给出一个你想做什么的例子吗。你能检查编辑过的问题吗?你不会在这行中找到
#check
,因为它将在
env
文件中作为注释处理。所以这种方法行不通。如果使用像
这样的东西呢!检查
?我只是想用任何东西来标记行。我想你已经进入了“黑客”代码的领域——请看下面答案中的建议。我只是想用
来标记行!选中
,例如仅编码标记行。在我的示例中,使用
os.environ.get(“文件名”)
获取
FILE\u NAME
,如果它被标记为
!检查
假设将其编码为Base64,我的意思是我想询问有关向os.environ.get()函数添加行为的问题。您可以检索该行,然后根据输入的任何指标对其进行分析,但我建议不要使用这种方法。
check = os.environ.get("CHECK","FALSE")
if check == "TRUE":
   # Do your stuff herre