63
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[備忘録]Pythonでシェルコマンドを動かす

Last updated at Posted at 2018-08-21

Pythonでターミナル操作した時に詰まったところの備忘録

アドカレ2週目始まりました!!!
今日で10回目となりますCSGアドカレ頑張って行きましょう!!
多分三回書くのかな...
今回はPythonでターミナルを動かしたのでその備忘録を...

最近RaspberryPiを使った時にPythonで全体的に制御しながら既存のJavaで組んだプログラムを動かしたいといったことになりました.その時に色々調べつつやったのですがすこし詰まったところがあったので,その備忘録程度に...

Pythonからシェルコマンドを実行する

Pythonからシェルコマンドを動かすにはos,またはsubprocessを使うことになります.

まずosからシェルコマンドを実行してみましょう

import os

os.system('ls')

これでlsコマンドを実行できます.
次にsubprocessからシェルコマンドを実行してみましょう

import subprocess

subprocess.call('ls')

これでlsコマンドを実行できます

こういった風にシェルコマンドを実行することができます.
そして,シェルコマンドに表示されたものをpythonの変数に格納したいとなりました.

そこでsubprocessのPopenを用いて

import subprocess
process = subprocess.Popen(cmd, stdout=subprocess.PIPE,shell=True).communicate()[0]

として変数にとったのですがここで少し詰まってしまいました.

Pythonでターミナルに表示された文字を変数に取り込む

先ほどの

import subprocess
process = subprocess.Popen(cmd, stdout=subprocess.PIPE,shell=True).communicate()[0]

でとるとバイト文字列になっていたため,それをうまく扱えないといったことになっていました.ここでバイト文字列を普通の文字列へ変換する必要がありましたので

import subprocess

cmd = 'ls'
process = (subprocess.Popen(cmd, stdout=subprocess.PIPE,
                           shell=True).communicate()[0]).decode('utf-8')
print('コマンドは\n'+process+'です')

となり,このようにutf-8にデコードしてあげることで通常の文字列として扱うことができます.

つまり

import subprocess

cmd = 'ls'#<=ここにコマンドを当てはめる
process = (subprocess.Popen(cmd, stdout=subprocess.PIPE,
                           shell=True).communicate()[0]).decode('utf-8')
print('コマンドは\n'+process+'です')#何かしらの処理

としてあげれば別の言語で実行したプログラムの結果を出力して,Pythonから変数としてとったりも簡単に行えます.

63
57
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
63
57

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?