Edited at

[Python] Pythonからバッチファイルを起動、変数を渡す。

More than 1 year has passed since last update.


バッチファイルとは

Windowsで実行される一連のコマンド群を記述したファイルです。

バッチファイルには「.bat」と「.cmd」の拡張子の二種類がありますが、動作は基本的に同じです。この違いについて詳しく知りたい方は以下の記事を参照ください。

.cmd(拡張子)とは


なぜこの機能が必要?

単純にバッチコマンドを学習するのがめんどくさかったからです。

Python側で処理してしまって、その結果をバッチファイルの引数として渡すほうが楽でした。

いろんなライブラリ使えますし...(言い訳)


Python側の用意

os.system()関数の引数に、.cmdファイルのパスとコマンドライン引数を記述するだけで、指定した.cmdファイルへ処理を受け渡すことができます。

sys.argvで引数のリストを受け取ることができますが、起動したPythonファイル名がリストの一番初めに含まれるため、これを除外してインデックス1からforループをまわします。


fuga.py

import os

import sys

cmd_file = "hoge.cmd" # .cmdファイルへのパス
argvs = sys.argv # 複数の引数を持つ場合
argc = len(argvs)

command = cmd_file

for i in range(1, argc):
command += " " + argvs[i]

os.system(command)



cmdファイル側の用意

コマンドライン引数をすべて出力するコマンドを記述し、正しい値が取得できているか確認します。


hoge.cmd

@echo off

echo ".cmd Executed"

for %%f in (%*) do (
echo %%f
)

echo "Completed"



結果

コマンドプロンプトで、先程作成したPythonファイルを引数つきで呼び出します。

2017-02-18_123748.jpg

Python側に指定した引数が、.cmdの引数として使用できました。