以下を使用して、bashスクリプトからpythonスクリプトを実行できることを知っています。
python python_script.py
しかし、bashスクリプトからPythonスクリプトに変数/引数を渡したい場合はどうでしょうか。どうやってやるの?
基本的に、bashはファイル名を処理し、次にpythonがそれをアップロードしますが、呼び出すときにファイル名をbashからpythonに送信する必要があります。
以下を使用して、bashスクリプトからpythonスクリプトを実行できることを知っています。
python python_script.py
しかし、bashスクリプトからPythonスクリプトに変数/引数を渡したい場合はどうでしょうか。どうやってやるの?
基本的に、bashはファイル名を処理し、次にpythonがそれをアップロードしますが、呼び出すときにファイル名をbashからpythonに送信する必要があります。
回答:
bashスクリプトでPythonスクリプトを実行するには、ターミナル内で実行するのと同じコマンドを呼び出す必要があります。例えば
> python python_script.py var1 var2
Python内でこれらの変数にアクセスするには、次のものが必要です。
import sys
print sys.argv[0] # prints python_script.py
print sys.argv[1] # prints var1
print sys.argv[2] # prints var2
埋め込みオプション:
Pythonコードをbash関数でラップします。
#!/bin/bash
function current_datetime {
python - <<END
import datetime
print datetime.datetime.now()
END
}
# Call it
current_datetime
# Call it and capture the output
DT=$(current_datetime)
echo Current date and time: $DT
環境変数を使用して、埋め込まれたPythonスクリプトにデータを渡します。
#!/bin/bash
function line {
PYTHON_ARG="$1" python - <<END
import os
line_len = int(os.environ['PYTHON_ARG'])
print '-' * line_len
END
}
# Do it one way
line 80
# Do it another way
echo $(line 80)
http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scripts.html
スクリプトでの使用:
echo $(python python_script.py arg1 arg2) > /dev/null
または
python python_script.py "string arg" > /dev/null
スクリプトは出力なしで実行されます。
小さなPythonルーチンを呼び出してメッセージウィンドウを表示するbashスクリプトがあります。pythonスクリプトを停止するためにkillallを使用する必要があるため、上記のメソッドを使用できません。これは、他のpythonプログラムを削除する可能性のあるkillallpythonを実行することを意味するためです。
pythonprog.py "$argument"
& #&は制御をbashスクリプトに直接返すため、バックティックの外側にある必要があります。このメッセージのプレビューでは、何らかの理由でコマンドの両側に「 `」が表示されていません。
pythonスクリプトがpythonpythonprog.pyではなく名前でCLIから実行される限り、これはスクリプト内で機能します。複数の引数が必要な場合は、引用符内で各引数の間にスペースを使用してください。
getoptモジュールを見てください。それは私にとって非常にうまくいきます!
python python_script.py
Debianではデフォルトのシェルですでにbashのを使用している...ので、ちょうどあなたのbashスクリプトで実行しますpython python_script.py arg1 arg2 ...