Запустите скрипт Bash из Python и импортируйте экспортированные переменные среды в Python.

Запустите скрипт Bash из Python и импортируйте экспортированные переменные среды в Python.

У меня есть следующий скрипт Bash, который называется 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"

Теперь мой скрипт 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

Да... Так делать нельзя. Только ДОЧЕРНИЕ процессы имеют доступ к переменным окружения РОДИТЕЛЬСКОГО процесса. Вы можете SET переменные окружения для нового дочернего процесса (в зависимости от того, как вы его запускаете). По умолчанию используются собственные переменные родителя.

Из выходящего потомка вы получаете целое число, представляющее возвращаемое значение статуса, и можете изучить вывод. В вашем скрипте вы печатаете переменные. В python вы можете прочитать вывод, чтобы получить эти значения.

Связанный контент