如何在 Python 中获取 Shell 脚本中 export 的环境变量

在许多开发和运维工作中,Shell 脚本是自动化任务的重要工具。通过在 Shell 脚本中设置环境变量,我们可以影响其子进程的行为。然而,在某些情况下,我们可能需要在 Python 中读取这些环境变量。本文将介绍如何获取 Shell 脚本中 export 的环境变量,并提供示例代码。

什么是环境变量?

环境变量是存储在操作系统中的键值对,它们可以被应用程序调用。Shell 脚本常常使用 export 命令来定义环境变量,从而使这些变量在脚本的所有子进程中可用。例如:

export MY_VARIABLE="Hello, World!"

一旦您执行了这行代码,MY_VARIABLE 就可以在该 Shell 脚本中的任何子进程中访问。

从 Shell 脚本中获取环境变量

为了在 Python 中读取这些环境变量,有几种常用的方法。下面,我们将介绍一种将 Shell 脚本中的环境变量传递给 Python 的有效方式。

方法 1:使用 subprocess 模块

Python 的标准库中有一个 subprocess 模块,可以在 Python 中执行外部命令。通过该模块,我们可以调用 Shell 脚本并获取其输出。在 Shell 脚本中,我们将环境变量以某种形式输出到标准输出,Python 程序可以捕获这些输出。

示例 Shell 脚本
#!/bin/bash

export MY_VARIABLE="Hello from Shell!"
echo "MY_VARIABLE=$MY_VARIABLE"
示例 Python 代码

以下 Python 代码将运行上面的 Shell 脚本,并提取名为 MY_VARIABLE 的环境变量。

import subprocess
import os

def get_env_variable_from_shell(script_path):
    # 执行 Shell 脚本
    result = subprocess.run(['bash', script_path], capture_output=True, text=True)
    
    # 解析输出
    for line in result.stdout.splitlines():
        if line.startswith("MY_VARIABLE="):
            # 提取值
            _, value = line.split("=")
            return value

# 运行示例
script_path = 'path_to_your_script.sh'
my_variable = get_env_variable_from_shell(script_path)
print(f'获取的环境变量:{my_variable}')

方法 2:使用 os.environ

如果您的环境变量已经在当前 Python 进程中可用(例如,您在 Python 中之前通过 os.environ 来设置),您可以直接访问 os.environ 来获取它们。流程如下:

import os

# 假设已经通过其他方式将环境变量设置到当前 Python 进程中
os.environ['MY_VARIABLE'] = "Hello from Python!"

# 获取环境变量
my_variable = os.getenv('MY_VARIABLE')
print(f'获取的环境变量:{my_variable}')

关系图示例

为了更好地理解环境变量和它们在 Shell 与 Python 之间的关系,我们使用 Mermaid 语法创建了一个简单的关系图:

erDiagram
    SHELL_SCRIPT {
        string MY_VARIABLE
    }
    PYTHON {
        string my_variable
    }
    
    SHELL_SCRIPT ||--o{ PYTHON : "export"

在这个简单的 ER 图中,SHELL_SCRIPT 表示 Shell 脚本中的环境变量,而 PYTHON 则代表在 Python 中访问的变量。本图展示了 export 操作是如何使得 Shell 脚本中的变量能够在 Python 中被访问。

总结

在本文中,我们介绍了如何通过 subprocess 模块在 Python 中获取 Shell 脚本中定义和导出的环境变量。通过示例代码,我们展示了如何在 Python 中调用 Shell 脚本并提取其环境变量的值。掌握这些技能,可以帮助开发者在多种应用场景中有效地管理和使用环境变量,从而提升代码的灵活性和可复用性。

希望这篇文章能为您提供一些有用的指导,帮助您更好地理解和使用 Python 与 Shell 脚本之间的互动。