![從 Python 執行 Bash 腳本並將匯出的環境變數匯入 Python](https://rvso.com/image/192219/%E5%BE%9E%20Python%20%E5%9F%B7%E8%A1%8C%20Bash%20%E8%85%B3%E6%9C%AC%E4%B8%A6%E5%B0%87%E5%8C%AF%E5%87%BA%E7%9A%84%E7%92%B0%E5%A2%83%E8%AE%8A%E6%95%B8%E5%8C%AF%E5%85%A5%20Python.png)
我有以下名為 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 中,您可以讀取輸出來取得這些值。