【Python】バッチからPythonスクリプト実行サンプル(文字化け対策、引数渡しsys.argv、画面pause、引数の最大個数など)

Python
スポンサーリンク

WindowsでPythonを使う場合、バッチから.pyを呼び出して使う機会は多いのではないでしょうか。

ここでは、バッチからPythonを呼び出すメリット、文字化け対策、引数の渡し方など、実際に現場で使う際に肝になりそうなことを解説します。

バッチからPythonを呼び出すメリット

バッチからPythonを呼び出すことで以下のようなメリットがあります。

  • Pythonに引数を渡して処理させることができる
  • 別々のPythonファイルを複数呼び出すことが簡単にできる
  • タスクスケジューラへの登録が簡単になる
  • 既存のバッチファイルに追記するだけでPythonで書いた処理を実行できるようになる

バッチからPythonを起動する方法

まずは単純にバッチからPythonを起動する例です。

@echo off
cd /d %~dp0
python d:\sample\hello.py

何らかの理由でWinPythonを使っていて、パスを通していないような場合は、以下のようにpython.exeのpathも含めて記述しましょう。(WinPythonの便利さについてはこの記事に書いています。)

@echo off
cd /d %~dp0
d:\WPy64-31050\scripts\python d:\sample\hello.py

バッチの文字化け対策

バッチを日本語Windows環境で実行する場合、デフォルトの文字コードはShift-JISです。このため、バッチファイルをUTF-8で保存しているような場合、そのままでは文字化けしてしまいます。

今はクロスプラットフォーム化もあり、UTF-8で保存することのほうが多いのではないでしょうか。

表示結果が文字化けするような場合は、バッチの冒頭(下記2行目)に以下のようにchcpコマンドを記述します。

@echo off
chcp 65001
cd /d %~dp0
python d:\sample\hello.py

chcpコマンドは、コマンドプロンプトで使用される文字コードを変更するものです。

ちなみにchcpコマンドでよく指定しそうな文字コードとしては以下のようなものがあります。

932:shift_jis
20127:us-ascii
51932:euc-jp
65001:utf-8

バッチから引数ありでPythonを実行する方法

バッチからPythonに引数を渡したい場合は以下のようにします。

バッチ側の記述方法

set arg1=1
set arg2=2
set arg3=3
cd /d %~dp0
python d:\sample\hello.py %arg1% %arg2% %arg3%

Python側の記述方法

下記はPython側で実際に値を受け取るときの例です。

import sys
if __name__ == "__main__":
  param = sys.argv
  for p in param:
    print(p)

#実行結果
# 1
# 2
# 3
  • sys.argvはPythonスクリプトに渡されたコマンドライン引数のリストです。
  • sys.argv[0]にはスクリプト名(.py)が渡されてきます。

このため、バッチの引数を受け取るのにはsys.argv[1]以降が使われます。

if __name__ == "__main__":
  setting_path = sys.argv[1]
  file_name1 = sys.argv[2]
  file_name2 = sys.argv[3]

if __name__ == “__main__”:」という書き方は、そのPythonファイルが「pythonファイル名.py」という形で実行されているかどうか」を判定するためのものです。

バッチからPythonを起動したときに画面pause

上記のコードのままでは実行結果が確認できないままコマンドプロンプトが一瞬で閉じてしまいます。

このため、コマンドプロンプトを閉じずに実行結果を確認したい場合は、バッチ側に「pause」を書くのではなく、.py側でpauseしてやる必要があります。

これにはos.system(‘pause’)を使います。

Python側の記述方法

import os #冒頭に追加 
#処理
os.system('pause') #末尾に追加

バッチからPythonを起動する際の引数の最大個数について

引数の数自体には制限はありませんが、コマンドラインの文字数に制限があり、それは8191文字とされているので注意が必要です。

バッチ ファイルでは、次のコマンド ラインの合計の長さが 8191 文字を超えることはできません。

https://learn.microsoft.com/ja-jp/troubleshoot/windows-client/shell-experience/command-line-string-limitationlearn.microsoft.com

Pythonおすすめの勉強方法

Pythonを最も効率的に学べる方法についてはこちらにまとめています。

Python入門におすすめのUdemy学習教材 5選
本記事では、Pythonの入門学習におすすめのUdemy学習教材について紹介します。 はじめに このブログでも業務に役立つPython技術をかいつまんで取りあげていますが、体系立った知識を得るためには、やっぱり書籍か動画の学習教材を使うのが...
独習Python

独習Python

Amazon

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