Windows/Python/Cygwinの混乱


今年度から稼動している教育システムはファイルシステムが TSUBAME がホスティングしている CIFS サーバということがあって、少し妙なことになっています。整理すると、こういうことかな?

– 裏のファイルシステムは Linux なので、パーミションは Windows からは隠れている
– でも、ウェブサーバは Linux なので、パーミションの問題は重要
– どうやら、Cygwin からはファイルサーバのパーミションが見える

で、Linux がわかっている人ならば、public_html のパーミションは TSUBAME にログインして、すぐに変更できます。

ところが、これを新入生にやらせるのは無理があります。Windows のコマンドインタフェイスも知らない人に ssh と Linux コマンドを教えるわけにはいきません。

ということで、どうにかして彼らが簡単に public_html フォルダを作成し、適切なパーミションを設定できるようなユーティリティを作りたいと思ったわけです。生兵法は怪我のもとでした。

+ .py な拡張子のファイルをダブルクリックすると Python インタプリタが起動してそれを処理してくれる
+ .py で public_html を作成し、モードを設定するプログラムを作ると適切な Linux パーミションが設定できた
+ でも、(2) のスクリプトをダブルクリックして実行してもうまくいかない???

よく考えてみればわかることなんですが、教育システムには二種類の Python がインストールされていて、ダブルクリックして起動するのは Windows 版、Cygwin からのコマンド行から起動していたのは Cygwin 版という別のシステムだったのです。

悔しいので、ダブルクリックして起動する Windows 版 Python から Cygwin 版 Python を起動するスクリプトを作りました。同じ悩みを持っている人は少ないだろうけれども、ちょっと面白いので公開します。”sys.platform” を出力しているので、最初に Windows 版の Python が、次に Cygwin 版の Python が起動する様子が見られますよ。

#!/usr/bin/python
# vim: set fileencoding=utf-8

import sys
import os
import codecs

sys.stdout = codecs.getwriter(‘utf_8’)(sys.stdout)

print sys.platform

if sys.platform == ‘win32’:
fp = os.popen(‘c:\cygwin\bin\cygpath ‘ + sys.argv[0], ‘r’)
script_path = file.readline(fp).rstrip()
file.close(fp)
os.execl(‘c:\cygwin\bin\python’, ‘python’, script_path)

import time
time.sleep(20)

# vim: sw=4 smartindent autoindent