こんにちは。のっくんです。
今回はPythonでLinux(Ubuntu)のコマンドを実行する方法をご紹介します。
実行環境
・Python 3.6
・Ubuntu 16.04
目次
ls -lを実行する
UbuntuにインストールしたJupyterNotebookでコードを書いていきます。
Linuxのコマンドを使うには、subprocessモジュールをインポートします。このモジュールは元から入っているものですので、追加でインストールする必要はありません。
import subprocess cmd = "ls -l" try: res = subprocess.check_call(cmd.split()) except: print("Error.") print(res)
主な流れは以下の通り。
- cmdに実行したいコードを入れる
- cmd.splitで[“ls”,”-l”]というように分割してリストにする
- check_call関数に渡してコマンドの実行結果を得る
- コマンドが成功すれば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
以上となります。お疲れさまでした。