引数を入力として受け入れるPython関数があり、それを自動化してbashを介して呼び出したいと思います。ただし、呼び出し中に変数(文字列)を渡すと、bashでエラーが発生します。
a="test"
python -c "from pipeline_runs.z_full_pipeline import test; test($a)"
失敗した
NameError: name 'test' is not defined
しかし、変数がintの場合、効果は同じです。
a="10"
python -c "from pipeline_runs.z_full_pipeline import test; test($a)"
最初のコードが失敗した場合に実行されます。この現象が発生する理由と、bashスクリプトでPython関数に文字列を渡すために何を変更する必要があるかを説明できる人はいますか?
答え1
代わりにシェル関数で作成してください。これを端末に貼り付けるか、シェルの設定ファイル(~/.bashrc
例:bashの場合)に追加します。
pipeline_test(){
python -c 'from sys import argv; from pipeline_runs.z_full_pipeline import test; test(argv[1])' "$@"
}
次に、次のように実行します。
pipeline_test "$a"
答え2
あなたは試してください:
export a="test"
python -c "from pipeline_runs.z_full_pipeline import test; test('$a')"
この場合、コマンドは次に展開されます。from pipeline_runs.z_full_pipeline import test; test('test')
'test'
代わりに、test
前者は文字列で、後者は未定義の変数です。
しかし、安全な方法はos.environ
辞書を使用することです。次に、スクリプトをexample.pyファイルに入れます。そして始めましょう:
import os
a = os.environ['a']
test(a)
この方法は拡張性が高く、文字列を拡張する必要はありません。
シェルでは、およびはa="test"
同義語a=test
です。