【Python】Linuxのコマンドを実行する

 

こんにちは。のっくんです。

 

今回はPythonでLinux(Ubuntu)のコマンドを実行する方法をご紹介します。

 

実行環境

・Python 3.6
・Ubuntu 16.04

 

[toc]

ls -lを実行する

 

UbuntuにインストールしたJupyterNotebookでコードを書いていきます。

 

Linuxのコマンドを使うには、subprocessモジュールをインポートします。このモジュールは元から入っているものですので、追加でインストールする必要はありません。

 

import subprocess

cmd = "ls -l"

try:
    res = subprocess.check_call(cmd.split())
except:
    print("Error.")
print(res)

 

主な流れは以下の通り。

 

  1. cmdに実行したいコードを入れる
  2. cmd.splitで[“ls”,”-l”]というように分割してリストにする
  3. check_call関数に渡してコマンドの実行結果を得る
  4. コマンドが成功すれば0,エラーであれば”CalledProcessError”が返る

 

上記のコードを実行すると0が返ってきます。

 

ls -l の出力結果を得る

 

[speech_bubble type=”ln” subtype=”L1″ icon=”ilust/cat2_4_think.png” name=”ネコ”]ん??コマンドが実行できたことは分かったけど、出力結果を見たいって場合にはどうすればよいの?[/speech_bubble] [speech_bubble type=”ln” subtype=”L1″ icon=”profile_face.png” name=”のっくん”]大丈夫。ちゃんとそのための関数が用意されているんだ。[/speech_bubble]

 

以下のコードを実行してみましょう。

 

import subprocess

cmd = "ls -l"

runcmd = subprocess.check_output(cmd.split())
print (runcmd)

 

今度はcheck_output関数を使っています。こうすることでコマンドの実行結果がバイト列で返ってきます。

 

実行したコマンドの出力結果をファイルに書き込む

 

Linuxだと以下のコマンドを打つことで実行結果をファイルに書き込むことができます。

 

ls -l > ls_output.txt

 

Pythonで同じことをするには以下のようにします。

 

import subprocess

cmd = "ls -l"
output_file = "ls_output.txt"

# 標準出力をファイルに書き出す
with open(output_file, 'w') as f:
    subprocess.Popen(cmd.split(), stdout=f)

 

pythonを実行したディレクトリ内にls_output.txtができますので、中身をみるとlsの結果が見えます。

 

total xxxxx
-rw-rw-r-- 1 nok nok        0 11月 15 19:26 ls_output.txt
-rw-rw-r-- 1 nok nok     8270 11月 14 15:46 command.ipynb

 

以上となります。お疲れさまでした。

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog