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

ダブルクリックやドラッグ&ドロップでpythonを実行する (Windows)

ダブルクリックやドラッグ&ドロップでpythonプログラムを実行できるようにしました。

やり方

知ってる人にとっては当たり前だと思うんですが、バッチファイルを使えばダブルクリックやドラッグ&ドロップでpythonプログラムを実行できるようになります。いちいちキーボードで処理対象のファイルPATHを入力したりする面倒な作業を簡略化できます。

試行環境

Windows10
python3.6

バッチファイルとは

みんなが大好きな黒い画面、WindowsのコマンドプロンプトはOSのAPIを直接操作できる権限の強いインターフェイスです。ここに対して1行ずつコマンドを入力していく事も出来ますが、コマンドをテキストファイルにまとめて書いたバッチファイルを使っておいてまとめて処理する仕組みもあります。今回はこれを使ってpythonプログラムをダブルクリックやドラッグ&ドロップから使えるようにしちゃいます。

バッチファイルの作り方


作るのは簡単でテキストファイルにコマンドを1行ずつ書くだけです。拡張子をbatにするとバッチファイルとして扱ってくれます。あとは適当なエディタ(メモ帳でも良い)で書き換えるだけです。

ダブルクリックでpythonのコードを実行する

バッチファイルと同じフォルダに実行するpythonファイルを置いておきます。とりあえず以下のファイルを置いたものとします。

test.py
print('Hello, This is test.py!')

python.exeにPATHが通ってる環境なら以下でtest.pyを実行できます。

バッチファイル
python hoge.py

フォルダが違う場合もフルPATHを書けば実行できます。

conda環境のpython.exeを使う場合

python.exeをフルPATH指定で呼べばOKです。

バッチファイル
E:\Anaconda3\envs\tf\python.exe hoge.py

pythonの場所はconda activateしておいてwhere pythonで探せばすぐ分かります。

conda環境のpython.exeを使う場合 その2

conda activateもできます。

バッチファイル
call conda activate tf
python hoge.py

黒い画面に最小化して頂く

黒い画面さまにやって頂いてるので当然黒い画面が表示されるんですが、動作をモニターする必要がないときは見た目的に圧がすごいので最小化しておいてもらいます。その場合はバッチファイルを2つ使って、1つめのバッチファイルから最小化したコマンドプロンプトを呼んで、新しいコマンドプロンプトで2つめのバッチファイルを呼ぶようにします。

test1.bat
start /min %~dp0test2.bat %*

startコマンドに最小化オプション/minをつけて、最小化した状態でコマンドプロンプトを開きます。開いてから実行するコマンドを指定できますので、そこで2つめのバッチファイルを実行するように指定します。1つめのバッチファイルはそこで処理が終了しますので勝手に消えてくれます。

test2.bat
@echo off
E:\Anaconda3\envs\tf\python.exe test.py

2つめのバッチファイルは先程と同様にpython.exeを実行します。

ドラッグ&ドロップでファイルに対して処理を行う

pythonコードに引数の受け取り処理を追加します。

test2.py
import sys
print(sys.argv[-1])
コマンドプロンプト
> python test2.py hoge
hoge

test2.pyにコマンドライン引数を渡せるようになりました。バッチファイルにドラッグ&ドロップすると%1としてファイルPATHが受け取れるので以下のようにするとバッチファイルにドラッグ&ドロップしたファイルをpythonから処理できるようになります。処理後にコマンドプロンプトがすぐ消えてしまうので、timeoutで待機するようにしています。

バッチファイル
python hoge.py %1
timeout 10

上記のバッチファイルに適当なファイルをドラッグ&ドロップするとファイルのPATHをpythonに渡してくれます。後はpython側で好きなように処理するだけです。

実行結果
c:\hoge\fuga.txt

レッツトライ!

Why do not you register as a user and use Qiita more conveniently?
  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
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