※記事内に商品プロモーションを含むことがあります。
はじめに
Pythonの標準ライブラリsubprocessを使ってWindowsのコマンドを実行する方法を解説する。
subprocess.run
関数を使うことによって、コマンドプロンプトで実行できるコマンドを、Pythonから実行できる。
環境は以下の通り。
- Windows 10 Home Ver. 2004
- Python 3.7.4
コマンドを実行する
Windowsのコマンドを実行するには、subprocess.run
関数に以下のオプションを付けて実行する。なお、echo %date%
はシステムの現在の日付を表示するコマンドである。
|
|
戻り値はsubprocess.CompletedProcess
オブジェクトである(後述)。
オプションにstdout=subprocess.PIPE
を指定することで、実行結果を文字列として得られる。
また、shell=True
とすることで、コマンドプロンプトで実行した場合と同じ結果が得られる。ただし、任意のコマンドが実行できてしまうので、セキュリティの問題に注意されたい。
最後のencoding="shift-jis"
は、(上記に例では不要だが)文字化けを防ぐために入れている。コマンドプロンプトの実行結果の文字コードはShift-JISであるが、PythonはUTF-8として解釈するため、日本語が文字化けしてしまう。こけを防ぐために指定している。
実行結果の取得
実行したコマンドが結果を文字列で返す場合、戻り値のstdout
変数に結果が格納されている。
|
|
注意点
Windows標準のパス区切り文字は\(バックスラッシュ)であるが、Pythonではエスケープシーケンスとして解釈されるため注意する。コマンドに\を含む場合、以下のように2つ重ねるか、先頭にr
を付けたraw文字列とする。
|
|
また、subprocess.run
で呼び出されるのはコマンドプロンプトであるため、PowerShellのコマンドレットは実行できない。PowerShellのコマンドレットを実行するには、コマンドプロンプト経由でPowerShellを呼び出すなどする必要がある(参考リンクにあるQiita記事のコメント欄を参照)。