タイトル長いですが,要するにwindows上でpythonスクリプトに対して以下の画像のようにファイルをドロップするような処理がしたいときの話です.

Windowsではデフォルトではファイルをドロップできるのはexeやbatファイルに限られているようで,”script.py”のようなファイル名の場合にはファイルをドロップすることができません.レジストリをいじって*.pyにファイルドロップを可能にする方法対応するbatファイルを作成してそれからpyファイルを呼び出す方法などがありましたが,レジストリ変更したくない&複数ファイルに分けたくなかったので,以下のような方法を取りました.

'''
python %0 %*
exit /B
:'''

import sys
if __name__ == '__main__':
  print sys.argv

要点としては,「*.pyの拡張子は諦めて*.batにする」「batで自身とドロップしたファイルを引数としてpythonを実行するコードを,pythonから見えないようにコメントアウトする」という感じです.処理結果は以下のような感じです(見やすさのため少し整形しています).

>'''
''''' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

> python "awesome_script.bat" test.svg test2.svg   # 自身とドロップしたファイルを引数としてpythonを実行
['awesome_script.bat', 'test.svg', 'test2.svg']          # ドロップしたファイル名が取得できている

pythonのブロックコメントの”’がcmdで認識できないのではじめにエラーが表示されますが,pythonの処理自体は問題なく実行できます.あとはファイルの拡張子がpyではなくbatなので,エディタのシンタックスハイライトや入力補完ができないのが問題でしょうか.

少々問題はありますが,レジストリ無変更かつ単独ファイルでpythonスクリプトへのファイルドロップができます.もっとスマートな解法がありそうな気がするので,ご存じの方は教えていただけるとうれしいです.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です