環境変数に関してかなり興味深い問題があり、グーグルで検索しても意味のある結果は表示されませんでした。
$ echo $BUCKET && python -c "import os; print os.environ['BUCKET']"
mule-uploader-demo
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'BUCKET'
だから私はbashで利用できるがPythonの内部では利用できない環境変数を持っています。これはどのように起こり、どのように修正すればよいですか?追加の詳細は次のとおりです。
source envvars.sh
コマンドを使用して設定されますenvvars.sh
ファイルには、次のような行のみが含まれています:KEY=value
export BUCKET=$BUCKET
を実行すると、機能しますこれは、bashの可変スコープと関係があります。 export
は、変数をサブプロセスで使用できるようにします。次に例を参照してください。
→ export BUCKET=foo
→ env | grep BUCKET
80:BUCKET=foo
→ PAIL=bar
→ env | grep PAIL # no output
→ python -c "import os; print os.environ['BUCKET']"
foo
→ python -c "import os; print os.environ['PAIL']"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "...", line 23, in __getitem__
raise KeyError(key)
KeyError: 'PAIL'
→ CAN=baz python -c "import os; print os.environ['CAN']"
baz
したがって、子プロセスではPAIL
は失敗します。