私はbashスクリプト(test.sh)を実行しており、環境変数(env.shから)をロードします。それはうまくいきますが、私はpythonが既にbashスクリプトにある変数をロードできることを確認しようとしています。
はい、引数として必要な特定の変数を渡す方が簡単だと思いますが、bash変数を取得できるかどうか興味がありました。
test.sh
#!/bin/bash
source env.sh
echo $test1
python pythontest.py
env.sh
#!/bin/bash
test1="hello"
pythontest.py
?
print test1 (that is what I want)
変数をbashでエクスポートする必要があります。そうしないと、bashに対してローカルになります。
export test1
次に、Pythonで
import os
print os.environ["test1"]
設定される環境変数が永続的であると仮定すると、そうではないと思います。 os.environ
を使用できます。
os.environ["something"]
これを行う小さなライブラリを作成しました。
環境の設定に依存しないsubprocess
を使用する別の方法があります。ただし、もう少しコードを追加します。
次のようなシェルスクリプトの場合:
#!/bin/sh
myvar="here is my variable in the Shell script"
function print_myvar() {
echo $myvar
}
変数の値を取得したり、次のPythonコードのようにシェルスクリプトで関数を呼び出すこともできます。
import subprocess
def get_var(varname):
CMD = 'echo $(source myscript.sh; echo $%s)' % varname
p = subprocess.Popen(CMD, stdout=subprocess.PIPE, Shell=True, executable='/bin/bash')
return p.stdout.readlines()[0].strip()
def call_func(funcname):
CMD = 'echo $(source myscript.sh; echo $(%s))' % funcname
p = subprocess.Popen(CMD, stdout=subprocess.PIPE, Shell=True, executable='/bin/bash')
return p.stdout.readlines()[0].strip()
print get_var('myvar')
print call_func('print_myvar')
両方のShell=True
は、CMD
のシェルコマンドをそのまま処理するために設定され、executable='bin/bash'
プロセス置換を使用します。これは、デフォルトではサポートされていません/bin/sh
。