
Ich habe das folgende Bash-Skript namens 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"
Jetzt sieht mein Python-Skript namens test.py, das die Bash-Skripte aufruft, wie folgt aus
#!/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))
Wenn ich jetzt das Python-Skript ausführe, erhalte ich das folgende Ergebnis:
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'
Für jede Hilfe wäre ich sehr dankbar.
Antwort1
Ja... das können Sie nicht tun. Nur untergeordnete Prozesse haben Zugriff auf die Umgebungsvariablen eines übergeordneten Prozesses. Sie können die Umgebungsvariablen für einen neuen untergeordneten Prozess EINSTELLEN (je nachdem, wie Sie ihn starten). Die Standardeinstellung sind die eigenen Variablen des übergeordneten Prozesses.
Von einem bestehenden untergeordneten Element erhalten Sie eine Ganzzahl, die den Rückgabestatuswert darstellt, und Sie können die Ausgabe prüfen. In Ihrem Skript drucken Sie die Variablen. In Python können Sie die Ausgabe lesen, um diese Werte abzurufen.