python - 使用临时环境变量运行 Python 脚本
问题描述
我有一个 Python 应用程序,它利用 Kubernetes 配置中的环境变量,例如:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
namespace: default
data:
var1: foo
var2: bar
---
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: default
spec:
containers:
- envFrom:
- configMapRef:
name: my-config
因此,当应用程序被 Docker 化并在 Kubernetes 场上运行时,这很好。
但是,当在没有 Docker 和 Kubernetes的本地机器上运行应用程序时,只需一个简单的命令:
python app.py
os.getenv('var1')
即使没有 ConfigMap 或 Pod,我也必须让 Python 模块找到环境变量。
是否可以不需要在 Python 模块中添加额外的代码或向本地机器系统添加环境变量?
解决方案
在 shell 中,您还可以在调用脚本之前简单地临时为环境变量分配值。根本不需要改变你的脚本。
考虑以下app.py
仅打印环境变量ENV_PARAM
和ENV_PARAM2
:
#!/usr/bin/env python3
import os
print(os.environ['ENV_PARAM'])
print(os.environ['ENV_PARAM2'])
当未设置变量并且您这样称呼它时
python app.py
你会得到一个KeyError
.
键错误:'ENV_PARAM'
当您改为在同一行中指定值并像这样调用它时
ENV_PARAM='foo' ENV_PARAM2='bar' python app.py
它工作正常。输出:
foo
bar
这不会设置环境变量,所以如果你这样做
echo "$ENV_PARAM"
之后,它什么也不会返回。环境变量只是临时设置的,就像您需要的那样。
推荐阅读
- network-programming - 对 LAN 中的 Windows 10 PC 上的网络连接进行故障排除
- angular - ng 命令给出错误,SyntaxError: Unexpected token )。7
- spring-boot - 用于 https 的 Spring MVC 中的 ResponseEntity
- python - ModuleNotFoundError:没有名为“dataviz”的模块
- reactjs - onPanResponderRelease 不适用于 Android
- javascript - 我可以在 Nuxtjs App 上使用 Vuejs Material Dashboard 模板吗?
- python - 将嵌套列表转换为数据框,如果缺少值,则为 0
- python-3.x - 当两个变量彼此相等时,我正在尝试运行 if else 函数
- python - 在 Python3 中嵌套默认字典
- android - 使用统一崩溃构建的 Android 应用程序。如何获取错误日志并解决问题?