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では、出力を読み取ってこれらの値を取得できます。