batファイル化する目的とメリット
- Windowsのbatファイルから、直接pythonコードを実行できると、とても便利です。
- 一般に、batファイル化することでWindowsサーバのタスクスケジューラからpythonコードを繰り返し実行でき、データ処理を自動化できるようになります。
- このサンプルでは、openpyxlを用いて、サーバサイドでExcelファイル出力を自動化します。
- batファイルから行いたいことは、以下の通りです。
- 特定のAnaconda仮想環境を有効化(Activate)
- pythonコ-ドを実行
以下のサンプル例の前提条件
- 仮想環境[test1]が作成済み。
- openpyxlがinstall済み。
- 「test1.py」を作成します(以下のコード)。Excelファイルを作成するサンプルコードが含まれています。
- なお、Windowsのbatファイルにて「CDコマンド」で指定した「カレントディレクトリ」は、pythonコードに対しては有効ではありませんので、pythonコード中で
「os.chdirコマンド」を使用して 実行中のpythonコードでの「カレントディレクトリ」を指定しています。
- openpyxl ライブラリを使用してExcelファイルを作成します。
[test1.py]
import os
from openpyxl import Workbook
import datetime
os.chdir('C:\Anaconda_Datas')
now = datetime.datetime.now()
print ('# python code started : '+ now.strftime("%m/%d/%Y, %H:%M:%S"))
# Excel WorkBook
wb = Workbook()
# grab the active worksheet
ws = wb.active
# セルに直接データを配置することができます
ws['A1'] = 42
# 行にも配置できます
ws.append([1, 2, 3])
# Pythonデータ型は自動でdatetime型に変換されます
ws['A2'] = datetime.datetime.now()
# Excelファイルを保存します(os.chdirコマンドで指定したカレントディレクトリに保存されます。)
wb.save("sample.xlsx")
now = datetime.datetime.now()
print ('# python code End : '+ now.strftime("%m/%d/%Y, %H:%M:%S"))
- batファイルには、以下のように記述します。
- batファイルを呼び出しているWindowsコマンドプロンプトは直ぐに閉じてしまうため、pythonコードがちゃんと実行されたかどうか分かり難いので、[>> activate_test1.log]として、出力をテキストファイルに保存しています。
[activate_test1.bat]
CD /D C:\Anaconda_Datas
REM 仮想環境を有効化します
CALL C:\Anaconda_Datas\envs\test1\Lib\venv\scripts\nt\activate.bat >> activate_test1.log
REM Pythonコ-ドを実行します
C:\ProgramData\Anaconda3\python.exe C:\Anaconda_Datas\test1.py >> activate_test1.log
REM 仮想環境を無効化します
CALL C:\Anaconda_Datas\envs\test1\Lib\venv\scripts\nt\deactivate.bat >> activate_test1.log
batファイルを実行
- Windowsコマンドプロンプトからbatファイルを実行します。
- batファイルが正常に実行されると、"sample.xlsx"と"activate_test1.log"が作成されます。
- [activate_test1.log]には、以下のように出力されました。
[activate_test1.log]
# python code started : 01/03/2021, 17:53:32
# python code End : 01/03/2021, 17:53:33