JavaScriptを有効にしてください

PythonのsubprocessでWindowsコマンドを実行

 ·  ☕ 2 min read  ·  ✍️ Helve

はじめに

Pythonの標準ライブラリsubprocessを使ってWindowsのコマンドを実行する方法を解説する。
subprocess.run関数を使うことによって、コマンドプロンプトで実行できるコマンドを、Pythonから実行できる。

環境

  • Windows 10 Home Ver. 2004
  • Python 3.7.4

コマンドを実行する

Windowsのコマンドを実行するには、subprocess.run関数に以下のオプションを付けて実行する。なお、echo %date%はシステムの現在の日付を表示するコマンドである。

1
2
3
import subprocess
res = subprocess.run("echo %date%", stdout=subprocess.PIPE, 
                     shell=True, encoding="shift-jis")

戻り値はsubprocess.CompletedProcessオブジェクトである(後述)。

オプションにstdout=subprocess.PIPEを指定することで、実行結果を文字列として得られる。
また、shell=Trueとすることで、コマンドプロンプトで実行した場合と同じ結果が得られる。ただし、任意のコマンドが実行できてしまうので、セキュリティの問題に注意されたい。
最後のencoding="shift-jis"は、(上記に例では不要だが)文字化けを防ぐために入れている。コマンドプロンプトの実行結果の文字コードはShift-JISであるが、PythonはUTF-8として解釈するため、日本語が文字化けしてしまう。こけを防ぐために指定している。

実行結果の取得

実行したコマンドが結果を文字列で返す場合、戻り値のstdout変数に結果が格納されている。

1
2
print(res.stdout)
# 2021/02/07

注意点

Windows標準のパス区切り文字は\(バックスラッシュ)であるが、Pythonではエスケープシーケンスとして解釈されるため注意する。コマンドに\を含む場合、以下のように2つ重ねるか、先頭にrを付けたraw文字列とする。

1
2
"cd abc\\def"
r"cd abc\def"

また、subprocess.runで呼び出されるのはコマンドプロンプトであるため、PowerShellのコマンドレットは実行できない。PowerShellのコマンドレットを実行するには、コマンドプロンプト経由でPowerShellを呼び出すなどする必要がある(参考リンクにあるQiita記事のコメント欄を参照)。

参考

シェアする
ブログランキングに参加中です。クリックして頂けると励みになります。

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。Twitterで新着記事を配信中です