Help us understand the problem. What is going on with this article?

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

More than 3 years have 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の引数として使用できました。

kodai100
24歳 / CG Director, R&D Engineer, Technical Artist. https://stu.inc and https://pjblue.jp .
http://kodai100.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした