從 Python 執行 Bash 腳本並將匯出的環境變數匯入 Python

從 Python 執行 Bash 腳本並將匯出的環境變數匯入 Python

我有以下名為 Test_Vars.sh 的 Bash 腳本

#!/bin/bash
#----------------------------------------------------#
#  Environment Variables being used in the process   #
#----------------------------------------------------#
export CLUSTER=cluster-test.cloud
export USERNAME=puser
export PASSWORD=$(echo "bXlQYXNzd29yZAo=" | base64 -d)

echo "CLUSTER: $CLUSTER"
echo "USER: $USERNAME"
echo "PASS: $PASSWORD"

現在我的 Python 腳本 test.py 呼叫 Bash 腳本如下

#!/usr/bin/env python3

import os

home_dir = os.environ['HOME']
username = os.environ['USER']

print("User " +username +" home Directory is " +home_dir)

from subprocess import call
RC = call("/disk/home/roachd/Scripts/Test_Vars.sh")
cluster = os.environ['CLUSTER']
username = os.environ['USERNAME']
password = os.environ['PASSWORD']

print("Print Variables exported by Bash script Test_Vars.sh")
print("Cluster: " + CLUSTER)
print("User: " + USERNAME)
print("PD: " + str(PASSWORD))

現在,當我執行 Python 腳本時,我得到以下結果:

User roachd home Directory is /disk/home/roachd
CLUSTER: cluster-test.cloud
USER: puser
PASS: myPassword
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    cluster = os.environ['CLUSTER']
  File "/usr/lib64/python3.6/os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'CLUSTER'

任何幫助將不勝感激。

答案1

是的...你不能那樣做。只有子進程可以存取父進程的環境變數。您可以為新的子進程設定環境變數(取決於您啟動它的方式)。預設是父級自己的變數。

從退出的子進程中,您可以獲得一個表示返回狀態值的整數,並且可以檢查輸出。在您的腳本中,您列印變數。在 python 中,您可以讀取輸出來取得這些值。

相關內容