anaconda3の環境でVisual Studio CodeやSpyderを使ってPythonをいじっていますが、完成したpyファイルを実行するときに、Visual Studio CodeやSpyderを立ち上げずにbatファイルを活用して実行する方法です。
シンプルなbatファイル
コマンドプロンプトを立上げて実行する場合
単純にコマンドプロンプトを立ち上げてpyファイルを実行する場合は、「python 実行ファイルパス」で実行が可能です。実行ファイルを「C:\Users\USERNAME\Desktop\test.py」とすると以下のコードを打ち込むと実行できます。(USERNAMEは人によって違います。以下同じ)
python C:\Users\USERNAME\Desktop\test.py
batファイルで実行する場合
Windowsのメモ帳で新しいテキストファイルを作成して以下のコードを記載して保存します。
ファイル名の拡張子を「.bat」に変更することでbatファイルの完成です。batファイルをダブルクリックで実行するとコマンドプロンプトが立ち上がり、batファイルの中身が実行されます。
python C:\Users\USERNAME\Desktop\test.py
pause
2行目の「pause」はbatファイルの中身が実行されたあとコマンドプロンプトを開いたままにしたいときに記載します。print()などで何か出力する場合や、エラーが出た場合のエラー表示を確認したときはpauseを書いておきます。
pauseを書いていない場合は実行後に自動的にコマンドプロンプトは閉じられます。
実行pyファイルをドラッグ&ドロップで実行するbat
先ほどのコードでは、pyファイルのパスをbatファイルに書いて特定のpyファイルを実行するようにしていました。
今度は、bat内ではpyファイルを特定せず、batファイルにpyファイルをドラッグ&ドロップで実行するものを作ります。
python %1
pause
pyファイルのパスの代わりに「%1」としています。「%1」というのがドラッグ&ドロップされたファイルのパスを受け取る変数です。
相対パスのためにカレントディレクトリを変更して実行するbat
pyファイルを実行するだけなら先ほどのコードで実行可能ですが、pyファイル内で相対パスでファイルの読み込みや書込みをする場合には、上手くいきません。
コマンドプロンプトが立ち上がったときには、「C:\Users\USERNAME」をカレントディレクトリとなっているので、相対パスはこのディレクトリが基準になってしまいます。
そこで、pyファイルのパスからpyファイルのフォルダパスを取得し、カレントディレクトリを変更したうえで実行させます。
::文字コードをUTF-8にする
chcp 65001
::pyファイルパスを変数に格納
set PYpath=%1
echo %PYpath%
::PYpathのフォルダを取得
for %%I IN (%PYpath%) do set "DIRNAME=%%~dpI"
echo %DIRNAME%
set DIRPATH=%DIRNAME:~0,-1%
echo %DIRPATH%
::pyファイルのフォルダをカレントにする。
cd /d %DIRPATH%
::pyファイルを実行する
python %PYpath%
pause
pyファイルの実行の対象をドラッグ&ドロップで実行するbat
コマンドプロンプトでpyファイルの引数を与えて、pyファイルでこれを受け取るには、pyファイルで「sys.argv[-1]」を使います。
サンプルのtest.pyファイルは、受け取ったファイルのパスをprintで表示し、sample.txtに記載するファイルです。
import sys
file_path = sys.argv[-1]
print(file_path)
with open("sample.txt", mode="a") as f:
f.write("ドラッグ&ドロップされたのは ")
f.write(file_path+" です。\n")
これを実行するためのbatファイルです。pyファイルのパスをbatファイル内で記述して特定しておき、引数となるファイルをbatファイルにドラッグ&ドロップして実行するパターンです。
chcp 65001
::ドラッグされたファイルパスを格納
set FILEpath=%1
echo %FILEpath%
::pyファイルパスを変数に格納
set PYpath="C:\Users\USERNAME\Desktop\test.py"
echo %PYpath%
::PYpathのフォルダを取得
for %%I IN (%PYpath%) do set "DIRNAME=%%~dpI"
echo %DIRNAME%
set DIRPATH=%DIRNAME:~0,-1%
echo %DIRPATH%
::pyファイルのフォルダをカレントにする。
cd /d %DIRPATH%
::ファイルを実行する
python %PYpath% %FILEpath%
pause
21行目の「python %PYpath% %FILEpath%」が、
「python pyファイルパス 引数」となっています。
anacondaの仮想環境を起動し実行するbat
pyファイルをドラッグ&ドロップで実行するbatファイルで、anadondaの仮想環境を有効にして実行するbatファイルです。
chcp 65001
::anacondaの仮想環境をactivateする
call C:\Users\USERNAME\anaconda3\Scripts\activate.bat
call activate ENV_NAME
::anaconda3の仮想環境内のpython.exeでファイルを実行する
C:\Users\USERNAME\anaconda3\envs\ENV_NAME\python.exe %1
pause
コメント