バッチからPythonを起動(文字化け対策)
まずは単純にバッチから起動する例。
@echo off cd /d %~dp0 python d:\sample\hello.py
何らかの理由でWinPythonを使っていてパスを通していないような場合はpython.exeのpathも含めて記述。
@echo off cd /d %~dp0 d:\WPy64-31050\scripts\python d:\sample\hello.py
表示結果が文字化けするような場合は、バッチの冒頭に以下を記述。chcpコマンドは、コマンドプロンプトで使用される文字コードを変更するもの。下記ではUTF-8を指定してやっている。
@echo off chcp 65001 cd /d %~dp0 python d:\sample\hello.py
バッチから引数ありでPythonを実行
バッチからPythonに引数を渡したい場合は以下のようにする。
<バッチ側>
set arg1=1 set arg2=2 set arg3=3 cd /d %~dp0 python d:\sample\hello.py %arg1% %arg2% %arg3%
<Python側>
import sys if __name__ == "__main__": param = sys.argv for p in param: print(p) #実行結果 # 1 # 2 # 3
Python側で実際に値を受け取るときの例。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