Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

pythonでシステムコールするsubprocessライブラリ

Pythonでシェルコマンドを呼び出すにはos.callがあるが、
ナウなヤングはsubprocessをつかう

公式の動機付け(PEP 324 -- subprocess - New process module)として

No implicit call of /bin/sh. This means that there is no need for escaping dangerous shell meta characters.

実際のところ

PEP 324 -- subprocess - New process module | Python.orgより
ややバッドノウハウ的な、Python2系統でつかえたバッククォートでシェルコマンド展開して結果を格納するのを

cmd=`mycmd myarg`

このように書き換える。

cmd = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]

引数も渡せるぞ

import subprocess
import sys
 
command = ["ls", "-l"]
 
res = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
 
sys.stdout.buffer.write(res.stdout)

単純にコマンドやりたいだけなら

cmd = "pwd"
subprocess.run(cmd)

実行結果のCompletedProcessクラスとその篤明について

shuzo-kino.hateblo.jp