« [Mac OS X]iPhotoで選択中の画像をココログに一発でアップロード | Main | [Windows Mobile][Zaurus]Linux Zaurus用Advanced/W-ZERO3 [es]モデムドライバー »

2007.09.15

[Windows Mobile]Advanced/W-ZERO3 [es]でGSFinderとPythonCE/ruby-mswinceを組み合わせて使う

PythonCEやruby-mswinceをAdvanced/W-ZERO3 [es]上で実用的に使おうと思うと、やはり不出来なコンソールが障害として立ちはだかります。

何とかPythonスクリプトやRubyスクリプトをうまく使う方法は無いもんでしょうか。
ということで、GSFinderを使う手を考えてみました。

着目したのはGSFinderにある「ファイル>送る」機能です。GSFinderで選択中のファイルをPython/Rubyスクリプトに送ることにします。

拡張子への関連づけを変更

スクリプトにGSFinderで選択したファイルを引数として渡すためには、拡張子の関連づけの内容を変更する必要があります。要するにコマンドラインの末尾に"%2"を付け加えます。

PythonCEの場合:

"\Program FIles\Python25\python.exe" "%1"

"\Program FIles\Python25\python.exe" "%1" "%2"

ruby-mswinceの場合:

"\microSD\Ruby\bin\ruby.exe" "%1"

"\microSD\Ruby\bin\ruby.exe" "%1" "%2"

こっちはユーザーごとに違うと思いますが。

引数を取るスクリプトを書く

PythonCEの場合は、以下のような感じです。
Shift-JISのテキストファイルを、EUC-JPに変換して別ファイルに書き出すという処理内容です。
GSFinderから渡された引数は、sys.argv[1]で参照できます。

#! /usr/bin/env python
# coding: utf-8

import sys
import codecs
import os

fin = codecs.open(sys.argv[1], 'r', 'shift_jis')
res = os.path.splitext(sys.argv[1])
fout = codecs.open(res[0] + '_euc' + res[1], 'w', 'euc_jp')
for line in fin:
fout.write(line)
fout.close()

ruby-mswinceの場合は以下のような感じでGSFinderから渡された引数が参照できます。

hikisuu = ARGV[0].split('"')[0]

なぜか「ファイル名→"→ゴミ文字列」とダブルコーテーションを挟んでゴミが後ろに付くので、splitでゴミを掃除してます。ファイル名にダブルコーテーションを含むことは許されていないので、一応大丈夫かと。
ただしこれは完全な対策ではなく、少なくとも半角カナがファイル名に交じる場合は変なことになるのは確認してます。cmd.exe&バッチファイル、PythonCE(MortScript、nScript/nScriptmも引数取れるかな?)でファイル名を書き出すなどワンクッション挟んだ方が確実かもしれません。

GSFinderの「アプリケーションの起動」の設定

「ツール>オプション>アプリケーションの起動」で指定したフォルダに、スクリプトのショートカットを作成します。
デフォルトは「\Windows\SendTo」だったかな。
任意の場所に置いた(スペースが含まれないパスがいいと思います)スクリプトをコピー(Ctrl+C)し、上記フォルダで「編集>ショートカットの貼り付け」をすると簡単です。

GSFinderを一度終了し、再起動すると、「ファイル>送る」の中にスクリプトが現れているはずです。
ファイルを選択し、スクリプトに「送る」とすれば、スクリプトでそのファイルが処理できます。

何が便利?

GSFinderに、いろんな機能を追加できるといった感じで考えるといいですね。
PythonCEなら、GSFinderで選択中のファイルをftpでアップしたりできます。
でもその用途ならSimpleUploaderが非常に便利だったり……。
事前処理をやってからアップ、となってくると意味が出てきますね。

GSFinderで選択したテキストファイルをどっかのWebページのフォームからSubmitしたりとか。
GSFinderで選択したテキストファイルに、ネット上から引っ張ってきたデータを追記したりとか。
GSFinderで選択した画像を、いきなり決まっただれかにメールしたりとか。
GSFinderで選択したテキストファイルに対して、定型の置換処理をしたりとか。

いろいろあるかと思います。

不具合

そもそもおかしいことだらけですが、拡張子の関連づけで"%3" "%4"などと引数を増やしても参照できる引数は一つだけです。PythonCEでもruby-mswinceでも、"%3" "%4"などと増やそうが増やすまいが、GSFinderから渡ってくるのはファイル一つだけ。PythonCEの場合は、2番目以降の引数には変な制御文字(?)が入ってきます。ruby-mswinceの場合は2番目以降の引数の中身はnilです。前述のように、ARGV[0]に、GSFinderから渡ってきたファイル名とゴミが交ざって入ります。

今自分が使っているGSFinderはごりぽんさんのGSFinder+ for W-ZERO3ですが、GSFinder+TQでも同じでした。

Windows Mobileネイティブな処理系、MortScript、nScript/nScriptmで引数を(受け取れるものなら)受け取って、書き出したファイル経由でPythonCE/ruby-mswinceに渡した方がいいのかもしれませんね。

多分続く

cmd.exe等との連携はテストしてみようと思ってます。

おまけ:PythonCEで標準出力をじっくり読む

PythonCEで標準出力に出力しても、コンソールがすぐ閉じてしまい読めません。
そういう場合は、

res = raw_input("Pause")

という一文を最後に書いておくとダイアログが表示され、コンソールがすぐ閉じず、標準出力をじっくり読むことができます。
ruby-mswinceの場合は、標準出力の具合がよろしくないので、素直にファイルに書き出して読みましょう。

|

« [Mac OS X]iPhotoで選択中の画像をココログに一発でアップロード | Main | [Windows Mobile][Zaurus]Linux Zaurus用Advanced/W-ZERO3 [es]モデムドライバー »