今回はpythonの中にshellコマンドを実行できるライブラリと、それのよく使うやり方。またそれを使ってできる技など、丁寧に紹介します。
subprocess
それはsubprocessというライブラリです。一般的に下のようにインポートします# ライブラリのインポート
import subprocess as sp
sp.call("ここにshellのコマンド",shell=True)
実行例
```php // 今のsubprocessディレクトリにはtestフォルダとsub.pyが入っている subprocess % ls # sub.py test///sub.pyの中身
subprocess % cat sub.py
# import subprocess as sp
# sp.call("midir test2",shell=True)
// sub.py 実行
subprocess % python sub.py
// 確認
subprocess % ls
sub.py test/ test2/
test2フォルダが作られている
<h1>subprocessの応用</h1>
google corabやpipyに登録するpythonファイルなど、ローカルpcと繋げない時に用いる。 また、データだけ撮ってきて、最後にそのファイルを消したい時も使える。
この気象省の2020年の気象データをsubprocessからダウンロード
http://www.data.jma.go.jp/obd/stats/etrn/index.php
```php
subprocess % cat sub2.py
import subprocess as sp
sp.call("wget http://www.data.jma.go.jp/obd/stats/etrn/index.php?prec_no=&block_no=&year=2020",shell=True)
// python実行 wgetが実行された
subprocess % python sub2.py
#--2021-11-13 13:05:47-- http://www.data.jma.go.jp/obd/stats/etrn/index.php?prec_no=
#www.data.jma.go.jp (www.data.jma.go.jp) をDNSに問いあわせています... 104.71.166.219
#www.data.jma.go.jp (www.data.jma.go.jp)|104.71.166.219|:80 に接続しています... 接続しました。
#HTTP による接続要求を送信しました、応答を待っています... 200 OK
#長さ: 23860 (23K) [text/html]
#`index.php?prec_no=' に保存中
#index.php?prec_no= 100%[===================>] 23.30K 123KB/s 時間 0.2s
#2021-11-13 13:05:49 (123 KB/s) - `index.php?prec_no=' へ保存完了 [23860/23860]
ファイル削除
// 確認
subprocess % ls
# index.php?prec_no= sub2.py test/
# sub.py sub3.py test2/
subprocess % cat sub3.py
import subprocess as sp
sp.call("rm index.php?prec_no=",shell=True)
//
subprocess % python sub3.py
subprocess % ls
# sub2.py test/
# sub.py sub3.py test2/
まとめ
subprocessを用いればpythonファイル一つでデータをダウンロードし、データを整形し、結果を出力してデータを削除するところまでを行える