サブロウ丸

主にプログラミングと数学

Pythonスクリプト内でシェルコマンドを使う

subprocess

シェルの中で他のプログラムを起動し、そのプログラムが生成した出力を知りたいだけなら、getoutput()関数を使う。

import subprocess as sp
ls = sp.getoutput('ls')
ls
> 'Applications\nDesktop\nDocuments\n...(略)'


オプションとパイプ、リダイレクトを入れることも可能。

ls_l = sp.getoutpu('ls -a')
ls_l
> '.\n..\n.Backup\n...(略)'

ls = sp.getoutput('ls | wc')
ls
> '      27      27     263'


getstatusoutput()で終了ステータスと出力をタプルで返す。

ls = sp.getstatusoutput('ls')
ls
> (0, 'Applications\nDesktop\nDocuments\n...(略)')


ただ終了ステータスを得たいだけならrunを使えば良い。(ま、あんまり上と変わらないか..)

ls = sp.run(['ls'])
> Applications  Dropbox       Pictures      pipupgrade.py
Desktop       Library       Public        Documents     
Movies        Downloads     Music

ls
> CompletedProcess(args=['ls'], returncode=0)
ls.args
> ['ls']
ls.returncode
> 0



subprocessを使ったプログラムの例です。
pip3でインストールしたモジュールの中で更新可能なモジュールを全てinstall --upgradeするものになっています。



<参考>
17.5. subprocess — サブプロセス管理 — Python 3.5.2 ドキュメント