2017-03-14 14 views
0

これは私がやりたいことです。.shスクリプトから環境変数を取得し、Pythonスクリプトで使用する

エクスポートされる環境変数を含むA.shスクリプトがあります(たとえば、export AEnv==1234)。

その後、私はA.shを呼び出しB.shている:そして、私はB.sh.を実行.BATスクリプトを

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
ROOT_DIR="$SCRIPT_DIR/.." 

. ${SCRIPT_DIR}/A.sh 

を持っていますその下に私はPythonスクリプトを実行します。私のPythonスクリプトでは、環境変数AEnvを探しています。しかし、それは私に次のエラー与える:B.shはもう、したがって、障害が存在しない環境変数を終えたときに私は理解してきたように、私はos.environ['AEnv']

を使用しています

File "C:\Python27\lib\os.py", line 425, in __getitem__ 
return self.data[key.upper()] 
KeyError: 'AEnv' 

することです。

私には何が欠けていますか?

+0

のいずれかにPythonを呼び出してください。簡単な方法でスクリプトを実行すると新しいシェルが作成され、したがってenv変数は保持されません。スクリプトの呼び出し方法を確認できるようにコードを投稿してください。また、 'バット'の中で 'sh'をどのくらい正確に実行していますか? – nir0s

+0

@ nir0sコードを投稿できません。私のバットで.shファイルを呼び出す方法は、B.shを書くことです。 – user535081

+0

Pythonスクリプトも.batファイルによって起動されていますか? A.shとB.shだけでは、一時プロパティファイルに環境を書いてPythonで読むことを提案することができます。それとも、私たちに教えてくれなかったスクリプトがもうありますか? –

答えて

0

私はあなたがバットスクリプトによって何を意味するかわからないんだけど、どのような場合には、次の2つの問題に対処する必要があります:あなたは、基本的には、いずれかの環境変数に名前を付けることができますが

(1)あなたが好きなように、携帯性の問題を避けるために、大文字のみを使用してください。つまり、環境変数の名前はAENVにする必要があります。

(2)他のプロセスが環境変数を設定するプロセスの子プロセスでない限り、環境変数をあるプロセスから別のプロセスに「移送」することはできません。したがって、他の場所に値を格納する必要があります。次の3つの可能性があります:

  • 環境変数の値を定義するプロセスは、stdoutに名前と値を出力する可能性があります。呼び出し側スクリプトは出力をキャッチし、変数をそれ自身の環境に設定します。 Pythonスクリプトが呼び出されると、変数がそこにあります。

  • 生成スクリプトは、環境変数の値をファイルに書き込み、Pythonプログラムはそれをファイルから取り出します。

  • 「スタイルを渡し継続」:マスタースクリプトがないコールA.sh Pythonプログラムが、唯一A.shを行い、そしてA.shにPythonのプロセスの呼び出し行を渡します(どちらかパラメータとして、または環境を介して)。 A.shは環境を設定し、Pythonプログラムを呼び出し、Pythonプログラムの終了コードを呼び出し側に返します。

+0

私は、ファイルにパラメータを書き込んで、そのファイルを私のpythonスクリプトから呼び出そうとします – user535081

0

export AEnv=1234に変更してください。
bat-fileは、A.shの環境設定を決して知らないでしょう。 B.shから

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
ROOT_DIR="$SCRIPT_DIR/.." 

. ${SCRIPT_DIR}/A.sh 

echo "After calling A.sh: AEnv=${AEnv}" 

python C/Python27/lib/os.py 
関連する問題