popup mlv

作ったり、買ったり、遊んだり。

pythonからコマンドラインを使って操作する話

f:id:popupin0x0:20171101192602j:plain

pythonからコマンドラインを使って操作をするときなど3.5からサポートされたrunを使うと簡単にかけるという話です。

python 3.4までのsubprocessは酷いもので「subprocess.check_output」「subprocess.check_call」など使い分けが必要でした。3.5からは「subprocess.run」にまとめられかなり使い勝手が良くなったようです。

必要なもの

  • python 3.5以上 (私の環境は3.6です)

コマンドラインを使ってファイルを作る場合

import subprocess
subprocess.run("echo a > test.txt", shell=True, check=True)

結果

  • pythonを動かしたところにaと書かれたtest.txtが作成されています。

コマンドラインで操作を送って結果をpythonで受け取る

import subprocess
ret = subprocess.run("echo hoge", shell=True, check=True, stdout=subprocess.PIPE).stdout
print(ret)

結果

b'hoge\r\n'

このように文字列を受け取れます。

最後に

  • stdout=False シェルの結果を表示したくない場合はFalseにすると非表示にできます。まれによくできないものがあるのでそのときは諦めてください
  • shell=True はシェルコマンドを送るときに必要なのでほとんどTrueにする必要があるでしょう。
  • check=True はエラー(CalledProcessError)を受け取るときに必要なのでTrueのほうがいいでしょう。

自動化するときなどよく使うのではないでしょうか。