【Windowsコマンドプロンプト】Pythonスクリプトからコマンドを実行する方法

Python
挨拶
くろやぎ
くろやぎ

こんにちは!くろやぎ(kuroyagi_info)です。

Pythonスクリプトからコマンドを叩きたい!そんな悩みを解決してくれる、osモジュールのsystemメソッドを紹介します。

  • 対象読者
    • Pythonからコマンドを実行したい
  • 内容
    • Pythonのosモジュールのsystemメソッドの使い方
    • Pythonスクリプトからコマンドを実行
    • os.system()における適切な例外処理
  • 実行環境
    • Windows 10
    • Python 3.6

os.system()を使ってPythonでコマンドを実行

os.system()を使えば、Pythonスクリプトからコマンドを実行できます。Windowsのコマンドプロンプトで実行するコマンドを、Pythonスクリプトで実行できるということです。

os.system('実行したいコマンド')

Pythonでコマンドを実行してみる

ここでは、電源に関する設定の変更や確認ができる「powercfg」というコマンドをPythonから実行してみます。

import os

command = "powercfg /batteryreport"
os.system(command)
# バッテリ寿命レポートがファイル パス C:\battery-report.html に保存されました。

出力にファイル(battery-report.html)の保存先が記載されているので、そのディレクトリに移動して、htmlファイルを開きます。

このようなウィンドウが表示されればOKです。

余談ですが、バッテリーレポートを見ることで、お使いのPCのバッテリーの消耗具合を確認できます。レポートの見方については次の記事で解説しています。
Windows 10でバッテリーレポートを表示する方法

os.system()とsubprocess.call()の例外処理

一見すると、次の2つのスクリプトは同じ処理を実行しているように見えます。

import os

for i in range(10):
    command = "powercfg /batteryreport"
    os.system(command)
import subprocess

for i in range(10):
    command = "powercfg /batteryreport"
    subprocess.call(command, shell=True)

前者のほうが引数の数が少なくすっきりして見えて使いやすそうですよね。しかし、例外処理のことを十分に考慮するのであれば、後者の方を選択する方が良いです。なぜなら、このスクリプトの実行を止めようとしてCtrl Cを押すと、前者はそのまま次のループが実行されてしまうのに対して、後者はちゃんと例外を出して処理を終了してくれます。例外処理までしっかり対策したい場合は、後者の記述をするように心掛けます。

おわりに

pyファイルでも、batファイル的な使い方ができるようになるので便利です。WindowsでPythonを使うユーザーにとっては、非常に有効なテクニックです。

411
タイトルとURLをコピーしました