Ejecute un script Bash desde Python e importe las variables de entorno exportadas a Python

Ejecute un script Bash desde Python e importe las variables de entorno exportadas a Python

Tengo el siguiente script Bash llamado Test_Vars.sh

#!/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"

Ahora mi script Python llamado test.py que llama a los scripts Bash es el siguiente

#!/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))

Ahora, cuando ejecuto el script de Python obtengo el siguiente resultado:

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'

Cualquier ayuda sería muy apreciada.

Respuesta1

Sí... No puedes hacer eso. Sólo los procesos HIJOS tienen acceso a las variables de entorno de un proceso PADRE. Puede CONFIGURAR las variables de entorno para un nuevo proceso hijo (dependiendo de cómo lo inicie). El valor predeterminado son las variables propias de los padres.

De un hijo saliente, obtiene un número entero que representa el valor del estado de retorno y puede examinar el resultado. En su script, imprime las variables. En Python, puedes leer el resultado para obtener esos valores.

información relacionada