explorer を呼び出すだけの微ラッパー

たぶんねー、これをやりたい人、やってる人って多いと思うんだな。

同僚でも何人もこれをしてたんで、それだけ誰もが思うことなんだろう。ひとまずはオレ的動機はコマンドラインから使う explorer に渡すパスの話に書いた通りで、「出来ないと思いこんでて、ならばランチャーを作るしかないんだろうなぁと思いつつも思考停止してた」てことな。

「explorer だけ」なんて限定せずに発展は出来るけどひとまず explorer 専用のインチキなヤツ:

ee.py
 1 #! /bin/env python
 2 # -*- coding: utf-8 -*-
 3 from __future__ import unicode_literals
 4 
 5 import os
 6 from os.path import abspath
 7 
 8 
 9 if __name__ == '__main__':
10     import argparse
11     parser = argparse.ArgumentParser()
12     parser.add_argument("path", nargs="?")
13     args = parser.parse_args()
14 
15     if not args.path:
16         path = abspath(os.curdir)
17     else:
18         path = abspath(args.path)
19     os.system('explorer %s' % path)

os.system なんてサボり過ぎかもしらんが、それでもこの場合は問題ない。explorer は勝手に旅立っていくので。

大昔どうしてもこの手のことが不可欠なのがあったんだけどなぁ、名前を思いだせんのよ。cmd.exe の start に近い目的で…、あ、rundll32 かな? それで何をしてたのかも思いだせん。日常にしてたはずなんだけどな。まぁいいか、こんな旧式テクノロジ。今ならこの手のなら powershell とかそんなんがオススメよ。

ちなみにさっきの pwdpp に追加しようか迷ってる機能があってね。こやつは基本的には curdir の面倒しかみないとはいえ、今回の「explorer 呼び出し君」と組み合わせて今でもこんなステキなことが出来る:

ワタシにしては珍しく cygwin にいるとして
1 me@host: ~$ python ee.py `(cd /home/hhsprings ; pwdpp -W)`

つまり cygwin にいると Windows で言うところのワシはどこにおるねん、が逐一把握しずらくて、だから explorer をコマンドラインから起動するってしょーもないことも結構ダルかったりするけれど、若干良くなる、てことよね。(msys の pwd は元々 -W があるので別にいらんけれど。) で、これでいいちゃぁいいんだけれど、もう一声、python モジュールとして使う場合には、こういうことが出来るとひょっとしたら嬉しかったりするのかなてこと:

さっきと違い夢見がちな ee.py
 1 #! /bin/env python
 2 # -*- coding: utf-8 -*-
 3 from __future__ import unicode_literals
 4 
 5 import os
 6 import pwdpp
 7 from os.path import abspath
 8 
 9 
10 if __name__ == '__main__':
11     import argparse
12     parser = argparse.ArgumentParser()
13     parser.add_argument("path", nargs="?")
14     args = parser.parse_args()
15 
16     if not args.path:
17         path = pwdpp.abspath(os.curdir)
18     else:
19         path = pwdpp.abspath(args.path)  # cygwin 形式を読み替えてくれる…と嬉しい?
20     os.system('explorer %s' % path)

仮にこれが出来ると cygwin からの夢見がち ee.py 呼び出しはこうだ:

ワタシにしては珍しく cygwin にいるとして
1 me@host: ~$ ee.py /usr/bin/

まぁひょっとしたら嬉しいのかもしらんね、て思うわけね。

けどこれの実現て実は結構ダルいのよ。

そもそも「msys/msys2/cygwin 流儀に従う」ためにはソースコードを見てもらえばわかる通り結構手を変え品を変える必要があって、CPython 公式 Windows バイナリから msys に従うためにまさに mount を呼び出してまでそうしてるのね。

msys2、cygwin でそれをしなくて済んでるのは、素直に -c pwd で「彼ら流儀」を返してくれるから。仮に上の夢見がち abspath を作ろうとするなら、msys だけでなく cygwin ででも mount 呼び出さないと実現出来ない、と思う。msys2 は pwd -W があるので子 msys2 として cd させてみて pwd -W させてみればいいけど、cygwin ではそれが出来ない。(というか pwdpp を外部プロセスとして呼び出す手はあるが、さすがにネストが深過ぎて気が引ける。)

てわけで、まぁいつか気が向いたらやるかもなぁ。今はまぁこれでもいいか、て感じ。