WindowsやMacのバッチファイル(シェルスクリプト)でPythonプログラムを実行する



Pythonプログラムなどで何かの作業を自動化する時には、コマンド操作でファイルを実行していくことになりますが、バッチファイルを用意しておくとコマンド操作の手間を省くこともできます。

バッチファイルとは、シェルスクリプトを記述したテキストファイルです。
実行したいシェルスクリプトをファイルとして作成しておけば、WindowsのコマンドプロンプトやMacのターミナルでのコマンド操作でなにかを実行する作業がある場合、バッチファイルをダブルクリックするだけと、手間をかけずにシェルスクリプトを実行することができます。

ここでは、WindowsやMacのバッチファイル(シェルスクリプト)でPythonプログラムを実行する方法についてご紹介します。

Windowsのバッチファイル


サンプルとして、csvファイルの内容を色々と変更してからExcelファイルを生成するPythonプログラム(csvExcel.py)を例に見ていきます。

デスクトップから以下のディレクトリでPythonファイルを管理しているとします。

Desktop
├─TMP
   ├─python_excel
      ├─csvExcel.py(実行したいPythonプログラム)
      ├─csvExcel.bat



Windowsのバッチファイルは「.bat」という拡張子になります。
実行したいPythonプログラムと同じディレクトリにbatファイルを作成します。
利用するツールは、Windowsに標準搭載されているメモ帳や、普段使いしているコードエディタなどなんでもOKです。

batファイルには以下のように記述します。

csvExcel.bat

@echo off
cd /d %~dp0
python csvExcel.py
WindowsでPythonプログラムを実行するバッチファイルを作成する



1行目の「@echo off」の記述では、それ以下に記述しているシェルスクリプトを画面に表示させないようにしています。実行時にシェルスクリプトを表示してもよければ、またはデバッグやトラブルシューティングのために表示が必要な時は記述しなくてOKです。
2行目でcdコマンドを使い、「cd /d %~dp0」でバッチファイルがあるディレクトリに移動します。
/d」はドライブの変更の際に必要となります。「%~dp0」はバッチファイルのフルパスを表します。
そして3行目の「python csvExcel.py」でcsvExcel.pyを実行します。

作成したバッチファイルをダブルクリックで実行しますと、今回のサンプルであるPythonプログラムでExcelファイルが生成されます。

WindowsのバッチファイルでPythonプログラムを実行する

また「@echo off」の記述せず、一番最後にバッチ処理の実行を一時停止するpauseコマンドを記述することで、実行するシェルスクリプトを確認することもできます。

cd /d %~dp0
python csvExcel.py
pause
Windowsのバッチファイルでシェルスクリプトを表示してPythonプログラムを実行する



上記の場合はPythonプログラムが実行されてからの一時停止になりますので、デバッグやトラブルシューティングを行う際には必要となるでしょう。
セミコロン2つ「::」でコメント行としておくと、再度「@echo off」を有効にする際に手軽に戻すことができます。
コメントはコードエディタを使っていると、色分けされるのでわかりやすいです。

Macのバッチファイル


Macでの説明も、csvファイルの内容を色々と変更してからExcelファイルを生成するPythonプログラム(csvExcel.py)を例に見ていきます。

デスクトップから以下のディレクトリでPythonファイルを管理していくとします。

Desktop
├─TMP
   ├─python_excel
      ├─csvExcel.py(実行したいPythonプログラム)
      ├─csvExcel.command



Macのバッチファイルは「.command」という拡張子になります。
実行したいPythonプログラムと同じディレクトリにcommandファイルを作成します。
利用するツールは、Macに標準搭載されているテキストエディタや、普段使いしているコードエディタなどなんでもOKです。

commandファイルには以下のように記述します。

csvExcel.command

cd `dirname $0`
python csvExcel.py


dirname $0」でスクリプトのあるディレクトリの相対パスを取得するできます。
ディレクトリを移動するcdコマンドを使って、最初に「cd dirname $0」を実行してcommandファイルがあるディレクトリに移動し、「python csvExcel.py」を実行して同じディレクトリにあるcsvExcel.pyを実行します。

macOSでPythonプログラムを実行するバッチファイルを作成する



commandファイルが作成できましたら、あとはダブルクリックするだけでシェルスクリプトが実行できます。

ですがそのままcommandファイルをダブルクリックしても、アクセス権限のエラーメッセージが表示されて実行できません。
作成したばかりのcommandファイルには、アクセス権限を与える必要があります。


アクセス権限の変更には、ターミナルで実行権限を与えたいファイルに対して以下のコマンドを実行します。

実行権限

chmod u+x csvExcel.command


アクセス権操作コマンドのchmodを使って、csvExcel.commandファイルにu(ユーザーに対して)に実行権限を与えます(+(与える) x(実行権限を))。

対象のファイルまで移動してから実行する必要があるので、cdコマンドで移動してからchmodコマンドを実行します。
今回のサンプルの場合、「cd Desktop/TMP/python_excel」を実行して対象ファイルのあるディレクトリに移動した後、実行権限を与えるコマンドを実行します。

作成したばかりのcommandファイルにアクセス権限を与える



これでcommandファイルに実行権限が与えられました。

csvExcel.commandをダブルクリックしてスクリプトを実行します。ターミナルが立ち上がりますが、そのまま閉じてOKです。
今回のサンプルのPythonファイルが実行され、Excelファイルが生成させたのが確認できます。

macOSのバッチファイルでPythonプログラムを実行する



Macではpauseコマンドはなく、必ずターミナルが立ち上がります。ここはユーザーが手動でターミナルを閉じる必要がありますが、バッチ処理が行われたことはしっかりと確認できます。

最後に


バッチファイルはWindowsのbatファイルもMacのcommandファイルも、ほんの数行記述するだけと簡単に用意することができます。
Pythonプログラムの実行が必要になるたびに、コマンド操作でディレクトリを移動してPythonコマンドを実行するといった手間も省けるかもしれません。

バッチファイルが必要だと感じましたら是非試してください。