Set Environment Variable for Subsequent Script

Keywords: Environment Variable, shell script, python script.

定义问题

有一个 main.py 脚本, 功能是打印 EnvName 环境变量.

# -*- coding: utf-8 -*-
# content of main.py

import os

print(os.environ.get("EnvName"))

我们知道如果在 main.py 代码中加入 os.environ["EnvName"] = "local" 就可以在运行 Python 程序的时候设置.

但有的时候你这个 main.py 是一系列 bash command 中的一环, 你不能修改这个 main.py, 你希望在运行这个之前对环境变量进行设置, 并期待在 main.py 内部被捕获到. 这应该怎么做呢?

方法 1, 在 terminal 中修改环境变量

$ export EnvName="local" # 注意, EnvName="local" 只是为你的当前 shell session 的上下文设置了一个变量. 而这不是环境变量.
$ python main.py
local

方法 2, 在 shell script 中修改环境变量

#!/bin/bash
# content of run.sh

export EnvName="local"
python main.py

方法 3, 在 python shell script 中修改环境变量

# -*- coding: utf-8 -*-
# content of run.py

import os
import subprocess

os.environ["EnvName"] = "local"
subprocess.call(["python", "main.py"])