このレポジトリでは、pythonからbash scriptを呼び出す基本的な動作について解説することを目的として、簡単なプログラム例を紹介します。
個人的な情報共有資材ですが、再配布等はご自由に。
python実行環境があるlinuxシステムにおいて、このレポジトリをクローンしてください。
※python実行環境はconda環境を使っていただくこともできます。(conda activate qiime2-2022.2
)
git clone [email protected]:dakesan/linux_python_minimum_example.git
cloneできたら、そのディレクトリに移動します。
cd linux_python_minimum_example
こちらはlinuxコマンドを実行するシェルスクリプトです。シェルスクリプトでは、特に明示せずともコマンドライン引数を$1
, $2
, ...に受け取ります。
試しに以下のコマンドをlinuxターミナルで実行して、コマンドライン引数が受け取れていることを確認しましょう。
bash test.sh 引数1 引数2
引数1、2のところには何を入れてもOK。自由に試してみましょう。
動作を確認したところでコードを見てみましょう。
#!/bin/bash
echo "一つめの引数は${1}でした"
echo "二つ目の引数は${2}でした"
echo "引数を見つけたので意味も無く五秒bashスクリプトは停止します...."
sleep 5
echo "bashスクリプトは実行完了しました"
このコードはシンプルに引数を受け取り、echo
コマンドで表示させているだけです。
このpythonスクリプトはpythonからbashスクリプトを呼び出すコードが記述されています。
先ほどターミナル上で指定していた二つの引数を、ここではpythonファイル内に記述しています。(arg1
, arg2
がそれです)
subprocess.Popen()
メソッドを使うことでターミナルへとコマンドを投げることができます。
ではpythonファイルを実行できることを確認しましょう。 linuxターミナルで以下のコードを実行します。
python test.py
無事、pythonおよびbashからのログが出力することが確認できましたか? もし見れていない場合、python2を使っている可能性があります。python3実行環境でお試しください。
では今度はpythonのファイルを直接編集してから再度pythonファイルをターミナルから実行してみましょう。
具体的にはarg1
とarg2
を以下を参考に書き換えてから
arg1 = "書き換えた後の文字列"
arg2 = "同じく"
再びターミナルで実行です。
pyrhon test.py
どうですか?書き換えた内容が出力に反映されましたよね?
実際にはpython内部でarg1
は変数として動的に扱うことができます。
たとえば、特定のフォルダ下にあるファイル名を取得して投げたりだとか、連番をpythonで作成して投げたりとかとか・・・・。
このような変数の取り扱いについてイメージができれば幸いです。